在提供一定数量的请求后,杀死旧服务器线程/进程并启动新服务器线程/进程的原因是什么

时间:2016-01-05 22:21:10

标签: linux multithreading apache webserver linuxthreads

例如,apache httpd提供了一个指令MaxConnectionsPerChild,它通过杀死旧的进程并启动新进程来控制服务器回收进程的频率。

在提供一定数量的连接后,根本杀死旧线程的原因是什么。

这里不适用热门缓存吗?

1 个答案:

答案 0 :(得分:1)

来自the docs

  

将MaxConnectionsPerChild设置为非零值可限制金额   进程可能因(意外)内存泄漏而消耗的内存。

因此,如果每个请求(malloc()而不是free())泄漏1 MB,您将逐渐耗尽越来越多的内存,直到用完为止并且apache被杀死。但是如果设置MaxConnectionsPerChild 100,孩子将逐渐使用最多100 MB的内存,然后被杀死并返回到0。

这里适用“热缓存”的东西,设置MaxConnectionsPerChild会减慢apache的速度。这就是默认是无限的原因。 MaxConnectionsPerChild意味着内存泄漏的优雅管道磁带。一个有时间压力的程序员可能更愿意花1分钟设置MaxConnectionsPerChild,而不是花1周的时间来搜索malloc()。