我们在symfony 1.4和symfony 2中都有不同的PHP应用程序,并且所有这些应用程序在某些时候都有sfSessionStorage :: initialize需要很长时间的请求。
我正在谈论要加载几个分钟。以这个新的痕迹为例:
在这里你可以看到sfSessionStorage :: initialize花了 185秒。我们已经调试了好几天了,到目前为止还没有成功。我们已经查看了GC设置,尝试将会话存储在文件系统中的事件安装到RamDisk中,但没有效果。
这可能是什么原因?你有没有遇到过同样的问题?非常感谢任何帮助,谢谢!
答案 0 :(得分:3)
strace可能会对正在发生的事情有所了解。
假设您无法使用cli重现问题,我建议将进程数限制为1(mod_php的MaxRequestWorkers和php_fpm的max_children),将strace附加到进程并检查它挂起的位置。
例如在php_fpm案例中:
打开/etc/php5/fpm/pool.d/www.conf
并确保设置
pm = static
pm.max_children = 1
重启php_fpm和nginx
grep aux | php
找出进程ID sudo strace -p
后跟进程ID 如果只用一个系统调用它会坚持几分钟,你就会清楚地看到阻挡器在stdout of strace中。如果没有单个阻止程序,而是重复系统调用的长循环,您可能需要将其记录到文件中并在以后进行分析。例如。 sudo strace -p {pid} | tee /tmp/strace.log
。
如果单个工作人员无法重现问题,请尝试增加工作人员数量,并捕获所有进程的strace。
答案 1 :(得分:2)
不确定这会有所帮助,但请检查。
如果您手动处理会话,则应在frontend/config/factories.yml
all:
storage:
class: sfSessionStorage
param:
auto_start: false
您应该看到Deactivating the Unused Features以提高效果。
又猜测:
会话依赖于文件。因此,检查您的系统是否能够打开会话所需的许多文件。或者是否有任何创建文件的问题。
答案 2 :(得分:1)
感谢@SomeHelpingDude的评论指向这个帖子:http://webdriver.io/api/action/click.html,有人提到了实现自己的会话处理程序(https://forums.powweb.com/showthread.php?t=77977)的可能性。
我们做到了,并实现了一个使用memcached的会话处理程序。现在问题已经消失了。
我假设会话处理(文件系统)的本地方式最终会遇到死锁和其他性能问题,这些问题只能通过根本不使用文件系统来避免。
我仍然对为什么ramdisk首先没有解决这个问题感到困惑,所以如果有人能够解释这个问题,我会改变接受的答案。谢谢!