【发布时间】:2016-01-05 22:21:10
【问题描述】:
例如 apache httpd 提供了一个指令 MaxConnectionsPerChild,它通过杀死旧进程并启动新进程来控制服务器回收进程的频率。
在提供一定数量的连接后,完全杀死旧线程的原因是什么。
这不会使 cpu 缓存不必要地变冷吗?
【问题讨论】:
标签: linux multithreading apache webserver linuxthreads
例如 apache httpd 提供了一个指令 MaxConnectionsPerChild,它通过杀死旧进程并启动新进程来控制服务器回收进程的频率。
在提供一定数量的连接后,完全杀死旧线程的原因是什么。
这不会使 cpu 缓存不必要地变冷吗?
【问题讨论】:
标签: linux multithreading apache webserver linuxthreads
来自the docs:
将 MaxConnectionsPerChild 设置为非零值会限制数量 进程可能因(意外)内存泄漏而消耗的内存。
因此,如果您每个请求泄漏 1 MB(malloc() 但不是 free()),您将逐渐耗尽越来越多的内存,直到您用完并且 apache 被杀死。但是如果你设置MaxConnectionsPerChild 100,孩子会逐渐使用最多100MB的内存,然后被杀掉,回到0。
“热缓存”的东西在这里适用,设置 MaxConnectionsPerChild 会减慢 apache。这就是为什么默认是无限的。 MaxConnectionsPerChild 意味着内存泄漏的不雅管道胶带。时间紧迫的程序员可能更愿意花 1 分钟设置 MaxConnectionsPerChild,而不是花 1 周时间寻找 malloc() 调用。
【讨论】: