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

Apache 沉睡进程导致 OOM 的问题

  •  
  •   YvesX · 2018-04-17 18:11:12 +08:00 · 2443 次点击
    这是一个创建于 2410 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    tailf
        1
    tailf  
       2018-04-17 18:13:56 +08:00   ❤️ 1
    想办法把 Apache 换了。
    clino
        2
    clino  
       2018-04-17 18:14:14 +08:00   ❤️ 1
    话说为什么不换成 nginx+uwsgi 之类的部署方式来解决这个问题呢?
    uwsgi 还可以设置内存上限,超过了自动 kill worker 然后重启
    YvesX
        3
    YvesX  
    OP
       2018-04-17 18:21:21 +08:00
    @tailf #1
    @clino #2

    谢谢建议,我会尝试一下。
    myyou
        4
    myyou  
       2018-04-17 18:30:06 +08:00   ❤️ 1
    nginx+gunicorn+django 很方便,nginx 本身比 Apache 占用也小
    julyclyde
        5
    julyclyde  
       2018-04-17 19:39:45 +08:00   ❤️ 1
    load 大文件的事可不可以拆出去做呢?
    MeteorCat
        6
    MeteorCat  
       2018-04-17 20:02:57 +08:00 via Android   ❤️ 1
    看下是不是 apache 加载了一些模块导致的,apache 历史包裹很多,你看下某些 Mod 在吃资源
    YvesX
        7
    YvesX  
    OP
       2018-04-17 20:15:23 +08:00
    @myyou #4

    谢谢你的建议,结合上面几位朋友的说法,换了你所说的组合。开销减少并不是很明显(每个进程少了 80MB 左右),但问题似乎得到了彻底解决。
    YvesX
        8
    YvesX  
    OP
       2018-04-17 20:17:50 +08:00
    @MeteorCat #6
    现在已经换掉 Apache 了,但在之前的观察中,每个新建的 Apache 进程内存占用都是基本一致的,略大于那几个大文件的体积和。所以应该就是 WSGI 的问题,只是确实不太想得通为什么会出现这种情况……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2520 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.