从春节过后上班就一直在搞这台load比较高的机器
这台机器上跑的是apache+mod_ssl
最早以为是mod_ssl造成的load过高
于是把网通和教育网前端proxy转过来的请求都指给了http
(原来是https的请求指向https;http的请求指向http)
心想:少了至少一半的https请求,load该下来了吧
结果是: load还是居高不下
于是我又只有老老实实的查
查access_log,看看都访问了些什么东西
发现有个php程序是算某个文件的内容的md5码的
请求数巨多
于是我就打开看了看
发现是用函数md5_file来算的
我一翻php文档
发现这个函数速度巨慢,php文档建议用系统命令”openssl md5″来代替
我用测试程序测了下
发现用md5_file用的时间是openssl md5方法的70倍!!!
发现这个问题后
我欣喜若狂
总觉得应该已经找到问题之所在了
可当调整了程序之后,发现:
load还是没有降下去
这下似乎陷入僵局了
期间我把ipv6 disable了,重起过机器,对降低load还是没有效果
我再仔细分析了系统情况
发现系统网络流量也不大、cpu也不是特别忙(50%左右的idle)、内存也还有富裕
唯一的问题就是cpu的iowait比较高,一般在40%~50%之间
那么看起来应该是系统硬盘io的问题咯
这台机器的应用倒是在不停的upload、download一些文件
磁盘io多是正常的
但是用高速scsi硬盘做了raid(应该是raid5)的设备上再做reiserfs系统的磁盘设备会是性能瓶颈?
听起来自己都不相信
于是用iostat 5来看
发现一个设备一般情况下每秒钟的时候有3000左右个block的写入
但是想想,一个block只有4k,那么一秒钟12M的写入,会造成性能瓶颈?不知道。
再用vmstat 5来看
发现io的bo一项经常有超过2000的数
按照某人的说法
当小文件随机写的数大于2000的时候
有性能问题
这台机器貌似就正是这个情况(小文件随机写)
大概齐知道问题所在硬盘读写之后
既然暂时改不了程序的话
那就想办法调优reiserfs吧
最后的结果是给mount reiserfs分区的时候加了一堆参数了事
参数是这样的:
defaults,noatime,nodiratime,notail,data=writeback
Tags: Tags: cpu, iostat, Linux, load, md5, md5_file, openssl, Php, reiserfs, tune, vmstat 作者 哈哈
1 Comment »