首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Django

Apache 沉睡进程导致 OOM 的问题

  •  
  •   YvesX · 6 天前 · 471 次点击
    Apache2+mod_wsgi+Django,其中 wsgi 工作在 DaemonProcess 模式下,Apache 的 MPM 模式是 event。
    Django 有两个应用需要 load 大体积文件,所以每个 apache 进程占用内存 1.5GB 左右。服务器资源是双核+8GB。

    现在的问题是服务器会时不时自行启动新的进程,而旧的进程却并没有被释放掉。猜测是在尝试重启进程,因为 graceful restart Apache 的时候会有相同的进程沉积问题。
    由于我们 Apache 进程开销很大,所以这样几次以后就会占满内存导致服务崩溃,活不过半天。
    而定期重启的 dirty hack 也不是很理想,因为服务整个启动起来会花十多秒,如果太频繁会影响可用性。

    Apache 的错误日志已经是 info 级别,只能看到 wsgi 进程启动的事实,看不到任何别的异常。

    请问这样的问题怎样排查和解决呢?
    8 回复  |  直到 2018-04-17 20:17:50 +08:00
        1
    tailf   6 天前   ♥ 1
    想办法把 Apache 换了。
        2
    clino   6 天前   ♥ 1
    话说为什么不换成 nginx+uwsgi 之类的部署方式来解决这个问题呢?
    uwsgi 还可以设置内存上限,超过了自动 kill worker 然后重启
        3
    YvesX   6 天前
    @tailf #1
    @clino #2

    谢谢建议,我会尝试一下。
        4
    myyou   6 天前   ♥ 1
    nginx+gunicorn+django 很方便,nginx 本身比 Apache 占用也小
        5
    julyclyde   6 天前   ♥ 1
    load 大文件的事可不可以拆出去做呢?
        6
    MeteorCat   5 天前 via Android   ♥ 1
    看下是不是 apache 加载了一些模块导致的,apache 历史包裹很多,你看下某些 Mod 在吃资源
        7
    YvesX   5 天前
    @myyou #4

    谢谢你的建议,结合上面几位朋友的说法,换了你所说的组合。开销减少并不是很明显(每个进程少了 80MB 左右),但问题似乎得到了彻底解决。
        8
    YvesX   5 天前
    @MeteorCat #6
    现在已经换掉 Apache 了,但在之前的观察中,每个新建的 Apache 进程内存占用都是基本一致的,略大于那几个大文件的体积和。所以应该就是 WSGI 的问题,只是确实不太想得通为什么会出现这种情况……
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   2250 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 14ms · UTC 11:41 · PVG 19:41 · LAX 04:41 · JFK 07:41
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1