首先,我想说我使用Drupal作为CMS,并且我知道有单独的Drupal stackexchange站点。但我的问题不是Drupal特定的,它不在用户或高级用户级别。它与PHP和服务器相关。好吧,现在问题。PHP应用程序性能
我开发了尚未推出的网站。随机存取内存错误。有时服务器会崩溃。有助于重新启动。没有其他人使用应用程序,所以没有重负载。特别是超过了特权限制。我尝试了一些一般的东西 - 增加/减少PHP内存限制,寻找错误日志,记录缓慢的MySQL查询。没有...一样。
我已经运行'top'linux命令。根据浏览器请求,有4-5个apache进程。 MEM使用率(%)是10,5,4,3,0.5。两个过程运行> 10小时。 重新启动apache后,我获得了+ 40%的可用内存。
这里有一些问题和mysts对我来说。
- 为什么这两个进程在没有来自浏览器的活动请求的情况下运行那么久?我怎样才能防止他们?
- 为什么我在重新启动后有+ 40%的空闲内存,当我有10 + 5 + 4 + 3 + 0.5内存使用的Apache?这不应该是平等的?
- 这可能是内存泄漏吗?我如何检测它们?
- 我应该用什么技术从较高层次降低到低层次?想象一下,在我的一个函数中我有'内存泄漏',我应该如何让他在整个应用程序中?
- 如何基准我的特殊功能的内存和CPU使用率?
- 为什么服务器崩溃?即使基本的httpd重启正在返回“fork:无法分配内存”。这可能是内存泄漏的症状吗?
请逐点回答。
您是否使用过任何注重性能的模块(例如[from this list])(http://drupal.org/project/modules?filters=tid%3A123%20drupal_core%3A103%20bs_project_sandbox%3A0&solrsort=sis_project_release_usage%20desc ))?当你使用一些分析器时你看到了什么?你是否执行一些不寻常的任务,例如。用你自己的模块(比如用每个请求重建菜单)?你使用缓存吗? – Tadeck 2012-01-11 08:44:37
未使用性能模块。这不应该是发展中的问题,是的?一定要在生产中使用。我有一些自定义代码影响每一个请求,但我几乎可以肯定没有什么重要的东西。 – 2012-01-11 08:55:46
您可以使用一些性能分析模块,这些模块将列出执行的功能和/或数据库查询以及执行所需的内存使用情况和时间。它可以缩小问题的范围。当涉及到这个自定义代码时,你可能是错的,这完全取决于。例如。如果做得不正确,修改菜单可能会造成一些主要的性能下降。 – Tadeck 2012-01-11 09:08:35