最近,在Linux上对Apache-2.1.16做了一下压力测试;只访问一个简单的hello world静态文件,做了多次,每秒处理请求次数才700左右;
一定是哪里出现了问题,因为:
1. 虽然load很高,但是cpu和io都很低,这种现象就比较奇怪
2. client端的负载很低
3. 曾经有过 2000/s的测试,而且当时的机器配置比现在的要差的多
当我使用同样的方法对nginx做测试的时候,nginx可以达到 2.2w/s 。
无奈之下,只好又把strace请出来了,发现写日志的地方很慢。
于是怀疑是磁盘问题; 使用hdparm测试了一下磁盘,没有问题; 又用 time dd ... 测试了一下,写的速度也 700+MB/s ; 回头想想,确认了一下nginx也是记日志的,而且都是同一块磁盘,大概不是磁盘问题了。
修改Apache 配置文件,把记日志的配置注释掉, 重新测试,发现可以达到 7k+/s 了;仔细观察Apache的配置,是这样写的:
TransferLog "|/data1/apache2/bin/rotatelogs /path/to/logfile"
于是,我想怀疑rotatelogs 这个程序了,但是似乎也没有道理; 那么就只剩下那个管道了,恩, 大概问题就出现在管道上了。
因为管道的大小为4k, 多进程写管道,单进程读管道,也难免会出现阻塞的情况;另外,load高的时候,io是很低的,所以说磁盘不是瓶颈。 管道是瓶颈
----------
如何利用管道来模拟一个cpu、io都很低,但是load很高的实例呢?
原文转自:http://blogread.cn/it/article/3959?f=sa