前段时间我们遇到了一个有趣的问题。有时(不是每次,假设几乎每 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 但没有帮助。
可能有谁知道可能是什么原因,或者朝这个方向挖掘