最新 | 最热门 | 最高评价

+0  跟我学Rsyslog

Tag: Technical | Rsyslog
老王 发于 2014年05月09日 11:34 | 点击: 5326 | 展开摘要
在数据为王的时代,日志管理是一个绕不开的话题,相应的开源软件有不少,比如热门的三件套:Logstash、ElasticSearch、Kibana,可惜我对这些高大上的东西往往心存敬畏,不敢轻易触碰,相比较而言,我更喜欢能够快速上手的东西。

对于日志管理,老版本的Linux缺省使用Syslog,其配置大致如下所示:

shell> cat /etc/syslog.conf

# Log all kernel messages to the console.
# Logg

查看全文: http://www.udpwork.com/item/12231.html

+0  如何在Redis里按模式删除数据

Tag: Technical | Redis
老王 发于 2014年04月11日 16:40 | 点击: 1244 | 展开摘要
一台Redis服务器在很短的时间里消耗了几十个G的内存,最终因为SWAP而宕机。因为这台服务器的社会背景比较复杂,所以一时无法判断犯罪嫌疑人到底是谁。

最开始的直觉是认为肯定有人保存了大体积的数据,于是问题就变成了找出哪些键占用的空间比较大,DBA同事用了redis-rdb-tools等工具来分析数据文件。可惜的是虽然找到了一些大体积的键,但最终都排除了嫌疑,问题似乎陷入了僵局。

在被直觉带入死胡同之后,我们开始调整调查的角度:即便一个键本身占用的空间并不大,但是如果相同

查看全文: http://www.udpwork.com/item/12113.html

+0  一个Shell工具:jsondiff.sh

Tag: Technical | Shell
老王 发于 2014年03月19日 19:14 | 点击: 1883 | 展开摘要
我最近忙着重构一个历史项目,不过由于客观条件所限,没有测试用例可用,以至于我不得不通过人肉对比新旧服务器的结果集是否一致来判断对错。既然说懒惰是程序员的美德,所以我想还是写一个工具吧,加之结果集为JSON,于是便有了jsondiff.sh。

逻辑很简单,无非就是通过curl在不同的服务器上取得结果集,然后diff即可,不过这里有几点需要注意的地方:首先,JSON就一行,直接diff会失去意义;其次,JSON中汉字会被编码,不利于查看;另外,JSON中字段顺序是无所谓的,所以

查看全文: http://www.udpwork.com/item/11976.html

+0  一个HTTP小问题

Tag: Technical | HTTP
老王 发于 2014年02月25日 18:59 | 点击: 1163 | 展开摘要
同事叫我帮忙解释一个问题:一个PHP生成的重定向请求,在Nginx日志里产生两种截然不同的记录:一种响应体大小是零个字节;另一种响应体大小是五个字节。

现在年纪大了,面对问题时的嗅觉不再灵敏,第一感觉零是正确的,心想是不是重定向后忘记退出了,后面还有内容输出,可是查了一下代码发现没有问题:

<?php

header('Location: /path');
exit;

?>

绕了一圈后,我猛然意识到Nginx缺省开启了分块传输,没有「Content-Len

查看全文: http://www.udpwork.com/item/11768.html

+0  如何安全的Include文件

Tag: Technical | PHP
老王 发于 2014年02月25日 11:50 | 点击: 929 | 展开摘要
似乎多数人都觉得Include文件是一件非常简单的事情,可惜漏洞往往出现在我们忽视的地方。正所谓千里之堤溃于蚁穴,二战期间,法国人寄希望与马奇诺防线,却忽视了原本认为非常安全的阿登高地,让德国人有机可乘,最终的结果大家都知道了。

下面这个例子虽然是我杜撰的,但是我确信现实情况里一定存在类似的问题:

<?php

$debug = false;

// ...

$config = include 'config.php';

// ...

if ($debug)

查看全文: http://www.udpwork.com/item/11765.html

+0  通过FastCGI Cache实现服务降级

Tag: Technical | Lua | Nginx
老王 发于 2014年01月13日 11:29 | 点击: 1157 | 展开摘要
在自然界中,很多生物面临生死考验的时候,往往会做出惊人的反应,其中最为大家熟知的当属壁虎,危难关头,与其坐以待毙,不如断尾求生,通过自残来换取活下去的希望。对于互联网项目而言,同样存在着很多生死考验,比如:访问量激增;数据库宕机等等,此时如果没有合理的降级方案,那么结局必然是死路一条。

任何问题一旦脱离了实际情况,便失去了讨论的意义。在继续之前,不妨先介绍一下案例的背景情况:一个PHP网站,以读为主,原本躲在CDN后面,运行很稳定,后来新增了很多强调个性化的需求,便去掉了C

查看全文: http://www.udpwork.com/item/11523.html

+0  再叙TIME_WAIT

Tag: Technical | Linux | TCP
老王 发于 2013年12月31日 20:17 | 点击: 1170 | 展开摘要
之所以起这样一个题目是因为很久以前我曾经写过一篇介绍TIME_WAIT的文章,不过当时基本属于浅尝辄止,并没深入说明问题的来龙去脉,碰巧这段时间反复被别人问到相关的问题,让我觉得有必要全面总结一下,以备不时之需。

讨论前大家可以拿手头的服务器摸摸底,记住「ss」比「netstat」快:

shell> ss -ant | awk '
NR>1 {++s[$1]} END {for(k in s) print k,s[k]}
'

如果你只是想单独查询一下

查看全文: http://www.udpwork.com/item/11447.html

+0  浅谈TCP优化

Tag: Technical | Linux | TCP
老王 发于 2013年11月21日 11:33 | 点击: 1688 | 展开摘要
很多人常常对TCP优化有一种雾里看花的感觉,实际上只要理解了TCP的运行方式就能掀开它的神秘面纱。Ilya Grigorik 在「High Performance Browser Networking」中做了很多细致的描述,让人读起来醍醐灌顶,我大概总结了一下,以期更加通俗易懂。

流量控制

传输数据的时候,如果发送方传输的数据量超过了接收方的处理能力,那么接收方会出现丢包。为了避免出现此类问题,流量控制要求数据传输双方在每次交互时声明各自的接收窗口「rwnd」大小,用来表

查看全文: http://www.udpwork.com/item/11173.html

+0  记录一个软中断问题

Tag: Technical | Linux
老王 发于 2013年10月30日 16:17 | 点击: 1169 | 展开摘要
前些天发现XEN虚拟机上的Nginx服务器存在一个问题:软中断过高,而且大部分都集中在同一个CPU,一旦系统繁忙,此CPU就会成为木桶的短板。

在问题服务器上运行「top」命令可以很明显看到「si」存在异样,大部分软中断都集中在 1 号CPU上,其它的CPU完全使不上劲儿:

shell> top
Cpu0: 11.3%us, 4.7%sy, 0.0%ni, 82.5%id, ... 0.8%si, 0.8%st
Cpu1: 21.3%us, 7.4%sy

查看全文: http://www.udpwork.com/item/11039.html

+0  如何正确配置Nginx+PHP

Tag: Technical | Nginx | PHP
老王 发于 2013年10月23日 20:11 | 点击: 1287 | 展开摘要
对很多人而言,配置Nginx+PHP无外乎就是搜索一篇教程,然后拷贝粘贴。听上去似乎也没什么问题,可惜实际上网络上很多资料本身年久失修,漏洞百出,如果大家不求甚解,一味的拷贝粘贴,早晚有一天会为此付出代价。

假设我们用PHP实现了一个前端控制器,或者直白点说就是统一入口:把PHP请求都发送到同一个文件上,然后在此文件里通过解析「REQUEST_URI」实现路由。

此时很多教程会教大家这样配置Nginx+PHP:

server {
listen 80;
s

查看全文: http://www.udpwork.com/item/11012.html

+0  通过Strace定位故障原因

Tag: Technical | Strace
老王 发于 2013年10月06日 01:07 | 点击: 1846 | 展开摘要
俗话说:不怕贼偷,就怕贼惦记着。在面对故障的时候,我也有类似的感觉:不怕出故障,就怕你不知道故障的原因,故障却隔三差五的找上门来。

十一长假还没结束,服务器却频现高负载,Nginx出现错误日志:

connect() failed (110: Connection timed out) while connecting to upstream

connect() failed (111: Connection refused) while connecting to up

查看全文: http://www.udpwork.com/item/10866.html

+0  Nginx与Gzip请求

Tag: Technical | Lua | Nginx
老王 发于 2013年09月02日 23:20 | 点击: 1061 | 展开摘要
前些天,移动端的同事跑来问:某些API需要传输大数据,Nginx服务器能否支持Gzip请求?一方面可以节省移动端流量;另一方面还可以加快传输速度,提升用户体验。对于Apache来说,利用SetInputFilter,可以很轻松的实现这个功能,那么Nginx如何做呢?

既然移动端发送的是Gzip请求,自然需要想想如何在服务端解压缩。搜索一下现成的Nginx的模块,发现和Gzip相关的模块有如下几个:

Gzip: Gzip responses.

Gzip Precompre

查看全文: http://www.udpwork.com/item/10580.html
|<<<2345678>>>| 一共11页, 128条记录