我在戴尔R610(四核和12GB内存)上运行以下内容:红帽企业Linux服务器版本5.5 httpd 2.2.3 PHP 5.1.6
在此服务器上运行的Web应用程序是随机泄漏内存。 由于应用程序是相当大的,我今天花了一个办法来分析或追踪罪魁祸首的脚本。 目前为止我使用的最好的工具是strace -p PID -tt -o trace4.log -s 256 。 不幸的是,内存使用可以在几秒钟内从20米跳到791米,因此在罪魁祸首进程上运行不会产生任何有用的结果。
我尝试使用strace strace -f -o trace_all.log /etc/init.d/httpd start来启动httpd,但不幸的是,由于该站点收到相当高的stream量,导致极度的延迟和无响应。
我知道在生产环境中进行debugging并不是最佳实践,但是我正在努力缩小哪些页面和/或脚本导致此问题,并且在开发环境中进行testing时无法复制问题
任何build议将不胜感激。
另一种不那么侵入性的方式是想知道内存在哪里,就是运行pmap。 运行pmap -x会将所有分配给进程的内存转储出来。 它是由内存地址分解的,包括分配的大小,内存是否是这个进程的私有或者是共享的,以及关于这个内存(共享库/堆栈)正在使用什么的映射。