我刚在我的服务器上为我的一个客户安装了一个OpenCart系统(服务器是Debian Wheezy,有Nginx,PHP和MariaDB)。除了一件事,一切都很好。当客户尝试注册时,注册需要花费大量时间,大约需要3分钟。我已经跟踪了问题,并且在向客户和管理员发送电子邮件时很可能会挂起。
我使用SSMTP在服务器上处理电子邮件,SSMTP又使用我自己的电子邮件服务器。像Joomla这样的其他webapp工作正常,电子邮件立即发送,没有任何延迟(系统中的邮件命令也一样)。 Opencart设置为“mail”(我甚至尝试将SMTP直接输入opencart,但它无法正常工作)。
由于我基本上不了解OpenCarts内部工作的任何内容,更有经验的人可以帮我解决这个问题吗?
提前致谢!
修改
我能够成功找出问题的根本原因。它完全不是PHP或OpenCart,而是一个系统的东西。 php.ini中sendmail路径的设置被注释掉了,这意味着PHP试图自己找到它。出于某种原因,在OpenCart的情况下,它用于sSMTP。由于sSMTP是同步的,因此等待它完成需要很长时间。另一方面,Joomla去了我的服务器遗忘的Heirloom mailx来自一些旧的依赖(为什么我不知道)并且邮件命令立即退出,因此没有延迟。
我的解决方案经过数小时的调试和反复试验后,完全废弃了ssmtp和mailx,并使用postfix将邮件中继到外部服务器。现在一切都按预期工作了。
答案 0 :(得分:0)
我稍微概括一下 - 如何根本导致复杂PHP系统中的性能问题。
请按照以下步骤操作:
profiler_enable
或profiler_enable_trigger
,profiler_output_path
等。)profiler_enable
,则会为每个请求创建配置文件,如果没有设置,设置profiler_enable_trigger
只需将XDEBUG_PROFILE
参数添加到网址profiler_output_path
的目录,并在某个GUI工具中打开探查器输出文件(请参阅this answer)备注:强>
profiler_enable
,而是启用profiler_enable_trigger
,这样您就可以控制触发分析的请求(分析器输出文件可能相当大) )