启动 PHP 会话有时需要很长时间

启动 PHP 会话有时需要很长时间

前段时间我们遇到了一个有趣的问题。有时(不是每次,假设几乎每 100-200 次点击)session_start() 会花费很长时间。最多 60 秒。(最长的是 63 秒,一般在 50 秒左右)。

服务器运行 CentOS 6.5 (linux 内核 2.6.32-431.17.1.el6.x86_64) nginx/1.4.7 (是的我知道它很旧) + Apache/2.2.15 + PHP 5.3.3 (使用 mod_php) 两个英特尔 SSD 530 组成 Raid 0 有大量可用内存 5+ GB。我尝试调整 vm.swappiness 值,可能是因为某些内存磁盘事务。没有帮助。

即使服务器上几乎没有负载,它也会显示出来。
会话存储在文件中。将会话放在 ramdrive (tmpfs) 上。没有帮助。目录中大约有几百个会话文件。所以不应该有查找问题。有时在 include/require 上也会出现同样的问题,php 需要几秒钟才能加载文件,然后才能开始处理。所以这是一些 io 问题。会话启动过程挂起时,atop/top 没有显示任何异常。

挂起期间的 free -m 输出

             total       used       free     shared    buffers     cached
Mem:         32101      23485       8616          0       1532      15642
-/+ buffers/cache:       6310      25790
Swap:        16383       1222      15160

free -m 输出正常

             total       used       free     shared    buffers     cached
Mem:         32101      23438       8662          0       1532      15623
-/+ buffers/cache:       6281      25819
Swap:        16383       1222      15160

nginx 在速度变慢时在日志中写入此内容

2015/09/29 15:40:36 [警告] 16854#0: *14779 读取上游时,上游响应被缓冲到临时文件 /var/cache/nginx/proxy_temp/1/02/0000000021

尝试设置 proxy_max_temp_file_size 但没有帮助。

可能有谁知道可能是什么原因,或者朝这个方向挖掘

相关内容