【问题标题】:Apache Child process consume huge memoryApache子进程消耗大量内存
【发布时间】:2018-04-24 06:05:08
【问题描述】:

"top" 显示 httpd-Child-process 消耗内存的结果。 大多数子进程使用 400MB。我觉得这太大了。

通常,我知道子进程最多消耗 50MB 的内存。

你知道知道为什么子进程使用巨大内存的好方法吗?

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1039 nobody    20   0 32.7g 412m  55m S  0.0  0.3   0:50.76 httpd
10366 nobody    20   0 32.7g 411m  54m S  0.0  0.3   1:11.28 httpd
16115 nobody    20   0 32.7g 410m  53m S  0.0  0.3   0:44.23 httpd
26472 nobody    20   0 32.7g 410m  52m S  0.0  0.3   0:45.95 httpd
・・・・
・・・・

【问题讨论】:

    标签: php apache memory


    【解决方案1】:

    如果子进程正在积极运行并处理大型脚本,例如数据导入或其他内容,那么它们在运行时可能会在内存中保存大量数据。这实际上取决于脚本的运行方式。

    通常情况下,如果 Apache 将请求传递给 PHP 之类的模块或其他模块(您将 php 作为此问题的标签),则脚本引擎有责任对内存使用等内容实施一些常识性限制或时间限制,以防止人们创建试图占用所有服务器资源的脚本。

    我建议尝试将这些子工作人员追溯到特定请求,以确认它们只是失控的 PHP 脚本或其他东西,然后搜索这些脚本的内容以查看它们是否试图覆盖任何限制(像 set_time_limit(0) 或 ini_set("memory_limit",...))。如果他们这样做了,那么您将不得不与脚本的开发人员交谈以确定它们是否真的需要(例如,开发人员可能正在一次读取一个巨大的数据文件并将其保存在内存中而不是读取它小块)。

    【讨论】:

    • 非常感谢您的回答。我会继续解决这个问题。另一方面,我弄清楚了为什么 virt 的大小很大。原因是 php.ini 中的 apc.shm_size。 apc.shm_size 太大。
    猜你喜欢
    • 2022-01-16
    • 2014-01-04
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多