[英]Locating memory leak in Apache httpd process, PHP/Doctrine-based application
I have a PHP application using these components: 我有一个使用这些组件的PHP应用程序:
I've noticed that when I start up Apache, I eventually end up 10 child processes. 我注意到,当我启动Apache时,我最终得到了10个子进程。 As time goes on, each process will grow in memory until each one approaches 10% of available memory, which begins to slow the server to a crawl since together they grow to take up 100% of memory. 随着时间的推移,每个进程将在内存中增长,直到每个进程接近10%的可用内存,这开始使服务器慢慢爬行,因为它们一起增长占用了100%的内存。
Here is a snapshot of my top output: 这是我的最高输出的快照:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1471 apache 16 0 626m 201m 18m S 0.0 10.2 1:11.02 httpd
1470 apache 16 0 622m 198m 18m S 0.0 10.1 1:14.49 httpd
1469 apache 16 0 619m 197m 18m S 0.0 10.0 1:11.98 httpd
1462 apache 18 0 622m 197m 18m S 0.0 10.0 1:11.27 httpd
1460 apache 15 0 622m 195m 18m S 0.0 10.0 1:12.73 httpd
1459 apache 16 0 618m 191m 18m S 0.0 9.7 1:13.00 httpd
1461 apache 18 0 616m 190m 18m S 0.0 9.7 1:14.09 httpd
1468 apache 18 0 613m 190m 18m S 0.0 9.7 1:12.67 httpd
7919 apache 18 0 116m 75m 15m S 0.0 3.8 0:19.86 httpd
9486 apache 16 0 97.7m 56m 14m S 0.0 2.9 0:13.51 httpd
I have no long-running scripts (they all terminate eventually, the longest being maybe 2 minutes long), and I am working under the assumption that once each script terminates, the memory it uses gets deallocated. 我没有长时间运行的脚本(它们最终终止,最长的可能是2分钟),我的工作假设是每个脚本终止后,它使用的内存将被释放。 (Maybe someone can correct me on that). (也许有人可以纠正我)。
My hunch is that it could be APC, since it stores data between requests, but at the same time, it seems weird that it would store data inside the httpd process. 我的预感是它可能是APC,因为它在请求之间存储数据,但同时,它会将数据存储在httpd进程中似乎很奇怪。
How can I track down which part of my app is causing the memory leak? 如何跟踪我的应用程序的哪个部分导致内存泄漏?
What tools can I use to see how the memory usage is growing inside the httpd process and what is contributing to it? 我可以使用哪些工具来了解httpd进程内存使用量的增长情况以及有何贡献?
My hunch is that it could be APC, since it stores data between requests, but at the same time, it seems weird that it would store data inside the httpd process. 我的预感是它可能是APC,因为它在请求之间存储数据,但同时,它会将数据存储在httpd进程中似乎很奇怪。
What's weird about that? 这有什么奇怪的? That's exactly what APC does. 这正是APC所做的。 The memory is shared between all httpd processes, though, so it's not as bad as it sounds. 但是,内存在所有httpd进程之间共享,所以它没有听起来那么糟糕。 See Where does APC store its opcode and user variable cache? 请参阅APC在哪里存储其操作码和用户变量缓存? for details. 详情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.