【问题标题】:What is the reason to kill old server threads/processes and launch new ones after serving certain number of requests服务一定数量的请求后杀死旧服务器线程/进程并启动新线程/进程的原因是什么
【发布时间】:2016-01-05 22:21:10
【问题描述】:

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

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

这不会使 cpu 缓存不必要地变冷吗?

【问题讨论】:

    标签: linux multithreading apache webserver linuxthreads


    【解决方案1】:

    来自the docs

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

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

    “热缓存”的东西在这里适用,设置 MaxConnectionsPerChild 会减慢 apache。这就是为什么默认是无限的。 MaxConnectionsPerChild 意味着内存泄漏的不雅管道胶带。时间紧迫的程序员可能更愿意花 1 分钟设置 MaxConnectionsPerChild,而不是花 1 周时间寻找 malloc() 调用。

    【讨论】:

    • 所以这是防止使用 apache 服务器编写糟糕的代码?
    • 是的,就是这样。
    猜你喜欢
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2021-03-12
    • 2019-10-12
    • 1970-01-01
    相关资源
    最近更新 更多