首先,我想说我使用Drupal作为CMS,并且我知道有单独的Drupal stackexchange站点。但我的问题不是Drupal特有的,它不在用户或高级用户级别。它与PHP和服务器相关。好了,现在是问题。
我已经开发了一个尚未推出的网站。我随机出现内存不足的错误。有时服务器会崩溃。有助于重新启动。没有其他人使用该应用程序,因此没有繁重的负载。特别是我超出了隐私限制。我已经尝试了一些通用的方法——增加/减少PHP内存限制,查看错误日志,记录慢速MySQL查询。没有什么相同的
我已经运行了"top"linux命令。根据浏览器请求,有4-5个apache进程。MEM使用率(%)分别为10、5、4、3、0.5。两个进程运行时间均大于10小时。重新启动apache后,我获得了+40%的可用内存。
这里有一些问题和我的困惑。
- 当浏览器没有活动请求时,为什么两个进程运行这么长时间?我该如何防止它们
- 为什么在apache使用10+5+4+3+0.5内存的情况下,重新启动后我获得了+40%的可用内存?这不应该是平等的吗
- 这可能是内存泄漏吗?如何检测它们
- 我应该使用什么技巧从更高的级别降到更低的级别?想象一下,我的一个函数中有"内存泄漏",我应该如何在整个应用程序中找到他
- 我如何对我的特定函数进行内存和CPU使用情况的基准测试
- 服务器为什么崩溃?即使是基本的httpd重启也会返回"fork:无法分配内存"。这可能是内存泄漏的症状吗
请逐点回答。
听起来你可能在某个地方有一个无限循环,或者你在处理GD.之类的事情时没有释放资源
Linux在有空闲RAM的时候把东西放在RAM里,如果另一个进程突然需要RAM,而RAM没有被使用,Linux会把它释放/交换给需要的应用程序。检查"free"的输出,您会注意到一个缓存列,它指示了刚刚缓存的内容,并且可以随时释放。