这是我的网络应用程序的堆栈。只需nginx + php-fpm + php5.3 + mysql + memcache。最近我们部署了一些重构代码。其中涉及SQL重构和缓存调整。我们发现在部署之后,服务器负载急剧增长。内存使用率甚至更高。从顶部命令开始,许多php-fpm进程使用的内存比以前多2倍。所以是的,部署的代码有问题。这个问题只发生在生产环境中,在测试和测试中。 dev envs一切都很好,所以它与流量相关。
我的问题一般是如何找出哪些请求(脚本)或我的代码的哪些部分消耗了太多内存?找出最简单的方法是什么?
非常感谢。
答案 0 :(得分:1)
我们正在使用XHProf进行内存分析。这并不完美,但是你会对这种情况有很好的了解。如果你运行它多一次(这是你需要做的以找到尖峰要求)我还建议使用以下GUI:XHPROF GUI
问候
答案 1 :(得分:1)
创建一个包含文件以记录程序退出时的内存使用情况,然后使用auto-prepend进行映射。如果这是apache,那么将它写入stderr是安全的,它会出现在error_log中 - 不确定这是否适用于nginx:
<?php
function logit()
{
$line = $_SERVER['REQUEST_URI']
. ' ' . memory_get_peak_usage(true);
// if stderr works...
$stderr = fopen('php://stderr', 'w');
fputs(stderr, date('r') . ' ' . $line);
fclose($stderr);
// alternatively
openlog("php_memory", LOG_PID | LOG_PERROR, LOG_LOCAL0);
syslog(LOG_INFO, $line);
closelog();
}
register_shutdown_function('logit');