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

服务器 Out of memory 实在太难解决了

  •  
  •   duguxiaohuai · 102 天前 · 3149 次点击
    这是一个创建于 102 天前的主题,其中的信息可能已经有所发展或是发生改变。

    电商系统加了一个 crond 定时任务,其次就是定时任务里面涉及到 PHP 的循环,大概 2 分钟一次,每天凌晨三四点钟,web 服务器就挂了,找到 /var/log/message 里面查看日志,日志如下,请问各位大牛这个怎么解决? 环境 centos lnmp 8G 内存 Jun 14 03:45:08 iZbp14dhkm7u57alou7jitZ kernel: Out of memory: Kill process 18931 (nginx) score 2 or sacrifice child
    Jun 14 03:45:08 iZbp14dhkm7u57alou7jitZ kernel: Killed process 18931, UID 501, (nginx) total-vm:68052kB, anon-rss:23608kB, file-rss:28kB
    Jun 14 03:45:09 iZbp14dhkm7u57alou7jitZ kernel: Out of memory: Kill process 18933 (nginx) score 2 or sacrifice child
    Jun 14 03:45:09 iZbp14dhkm7u57alou7jitZ kernel: Killed process 18933, UID 501, (nginx) total-vm:68052kB, anon-rss:18376kB, file-rss:16kB
    Jun 14 03:45:09 iZbp14dhkm7u57alou7jitZ kernel: Out of memory: Kill process 18932 (nginx) score 2 or sacrifice child
    Jun 14 03:45:09 iZbp14dhkm7u57alou7jitZ kernel: Killed process 18932, UID 501, (nginx) total-vm:68052kB, anon-rss:23608kB, file-rss:8kB
    Jun 14 07:17:55 iZbp14dhkm7u57alou7jitZ kernel: imklog 5.8.10, log source = /proc/kmsg started.

    43 回复  |  直到 2018-06-15 00:46:11 +08:00
        1
    lookwi   102 天前 via iPhone
    啥子哦,nNginx 执行定时任务🙀
        2
    Mbin   102 天前 via iPhone
    怀疑你代码内存泄露,跑一段时间就爆了
        3
    duguxiaohuai   102 天前
    @lookwi 定时任务的话是 php 和 redis

    @Mbin 代码是 PHP 白天没事 凌晨三四点就挂了 挂的是 NGINX
        4
    des   102 天前 via Android
    一点都没说清楚,
    是有自己加的 nginx 模块吗?
    是每次都是同一时间挂的吗?
    有试过把时间调到其他时间点吗?
    dump 文件有看过吗丁?
        5
    des   102 天前 via Android
    还有既然是 nginx 挂了,没去看 nginx 日志?
    挂掉之前有访问异常吗?
        6
    duguxiaohuai   102 天前
    @des nginx 日志一直是这样,一秒钟一回,然后挂了就没错误日志了 2018/06/14 04:33:21 [alert] 1462#0: worker process 22815 exited on signal 9
    2018/06/14 04:33:22 [alert] 1462#0: worker process 22816 exited on signal 9
    2018/06/14 04:33:23 [alert] 1462#0: worker process 22817 exited on signal 9
    2018/06/14 04:33:23 [alert] 1462#0: worker process 22818 exited on signal 9
    2018/06/14 04:33:24 [alert] 1462#0: worker process 22819 exited on signal 9
    2018/06/14 04:33:24 [alert] 1462#0: worker process 22821 exited on signal 9
    2018/06/14 04:33:25 [alert] 1462#0: worker process 22820 exited on signal 9
    2018/06/14 04:33:26 [alert] 1462#0: worker process 22822 exited on signal 9
    2018/06/14 04:33:27 [alert] 1462#0: worker process 22824 exited on signal 9
    2018/06/14 04:33:27 [alert] 1462#0: worker process 22823 exited on signal 9
    2018/06/14 04:33:28 [alert] 1462#0: worker process 22825 exited on signal 9
        7
    a7a2   102 天前
    1、php 什么版本 检查一下漏洞
    2、检查一下 cron 这个 php 的代码 ,可能有问题,可能需要结合业务排查。
    3、看看是不是攻击?例如 http ddos

    直接给我 ssh 权限 我能查出来 收费
        8
    nicevar   102 天前   ♥ 1
    一天挂一次这么频繁应该很好查的,代码有内存泄漏,稍微压一下观察内存变化分析一下日志就能找到问题所在了
        9
    greenskinmonster   102 天前
    老板,来两斤内存
        10
    x7395759   102 天前   ♥ 1
    说明你水平不够
        11
    duguxiaohuai   102 天前
    @greenskinmonster 已经 8G 内存 没多少数据量

    @a7a2 PHP5.6 是加了定时任务和 redis 之后挂了

    @nicevar 大哥你说的这个落地难啊
        12
    a7a2   102 天前
    php 本身的日志,再看 php 代码
        13
    nicevar   102 天前
    @duguxiaohuai #11 这个落地还难啊,那些一个月以上才崩一次是不是服务器可以不要了,你这也太弱了,一天就能重现的,压力测试一下,先观察内存占用情况,最蠢的办法部分加载排除也能看出个所以然了
        14
    mringg   102 天前 via iPhone
    谁让你内存爆了 oom killer 了解一下
        15
    CoderGeek   102 天前
    看下 oom score
        16
    huluhulu   102 天前 via iPhone
    我们一年多丢一次消息导致 kpi peak 一瞬间的 bug 都定位出来了,你这个天天有问题这么容易重现的,不会太麻烦的。
    不可重现的 case 才头疼……
        17
    letitbesqzr   102 天前
    java web 表示... 8g 内存怎么跑. 启动起来就得跑满了...
        18
    icegreen   101 天前
    定位分析问题算是基本素养了;
    一天一次的缕缕思路就找出问题了; 谈不上难.
        19
    misaka19000   101 天前
    @letitbesqzr #17 我们的 Java 都是跑在 4G 内存上无压力
        20
    Universe   101 天前 via Android
    我猜 crontab 分钟写的*
        21
    duguxiaohuai   101 天前
    @mringg
    @letitbesqzr PHP 的话内存 8G 足够了啊
        22
    duguxiaohuai   101 天前
    @Universe */1 * * * * 这样的 一分钟执行一次
        23
    JasperYanky   101 天前
    是不是业务时间太长了 2 分钟没执行完,下面的业务又来了,然后堆积了;可以考虑一个进程 while True sleep(120) 这种方式,当然我不懂 PHP
        24
    duguxiaohuai   101 天前
    @JasperYanky 感觉有点像这个问题 但是为什么白天正常 都是凌晨出问题
        25
    3dwelcome   101 天前
    8G 内存够不够,又不是你觉得够不够,而是操作系统和程序觉得够不够。

    看一下 top 里的 swap,如果一直用磁盘换内存,在 99%内存的边缘徘徊,那出事是必然的。

    服务器要稳定,就必然要留余地,你内存碎片都没算进去呢,普通情况下,最稳定就是长占用总内存的 70%~80%,不能用太多了。
        26
    JasperYanky   101 天前
    @duguxiaohuai 是不是晚上有其他程序跑?我晚上服务器负载比白天还高~
        27
    privil   101 天前
    ……首先,你服务器的监控呢,内存监控图一眼就看出来了,oom 机制有很多文章详细讲了,不过为什么 nginx 的分数最高,居然是先挂 nginx 而不是先杀 php
        28
    duguxiaohuai   101 天前
    @3dwelcome
    Tasks: 1268 total, 2 running, 1266 sleeping, 0 stopped, 0 zombie
    Cpu(s): 54.8%us, 16.7%sy, 0.0%ni, 23.7%id, 0.0%wa, 0.0%hi, 4.8%si, 0.0%st
    Mem: 8193324k total, 5348568k used, 2844756k free, 35780k buffers
    Swap: 0k total, 0k used, 0k free, 1161076k cached
        29
    duguxiaohuai   101 天前
    @privil 老兄 给介绍一个监控软件吧 我也十分奇怪 循环的话应该是 php-fpm 挂掉,redis 也没挂掉,居然是 nginx 挂了,而且更奇怪的是半夜没有流量的,除了 2 点的数据备份,夜间没有其他操作
        30
    duguxiaohuai   101 天前
    @JasperYanky 除了 2 点的备份 但是挂在三四点钟
        31
    JasperYanky   101 天前
    @duguxiaohuai 我还是倾向于定时任务堆积的问题,你改了试试看,我印象深刻的原因,是我以前也这么干过,一模一样的感觉
        32
    3dwelcome   101 天前   ♥ 1
    swap 还是要的,不能设到 0k,关键时候,可以救命。要不然内存不够的话,进程就只有被杀的命。
        33
    3dwelcome   101 天前
    "redis 也没挂掉"

    redis 对于 oom 有特殊的处理,代码写的和普通程序不一样。哪怕内存再少,也不会挂。
        34
    deadEgg   101 天前
    压力测试看内存增长 是否能复现该情况。

    我估计是有内存泄露。
        35
    coolloves   101 天前
    如果不想被杀,调高评分即可
        36
    pandaMao   101 天前
    #20 #23 +1
    每次任务执行一次的时间是多长?
        37
    defunct9   101 天前   ♥ 1
    开 ssh,让我上去看看
        38
    pcdRob   101 天前
    哈哈 楼上老哥又来了
        39
    fangxing204   101 天前 via Android
    试试用 monit 监控下
        40
    chengxiao   101 天前
    我觉得老哥 可以看看 redis 的占用
        41
    mingyun   101 天前
    不会是 for 循环里查数据库吧
        42
    mafic   101 天前 via iPhone
    @mingyun 我们这也有类似的问题 for 循环查数据的话咋整
        43
    wwhc   101 天前
    8G 内存没有 Swap ? 请安装 zram
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1673 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 19ms · UTC 03:17 · PVG 11:17 · LAX 20:17 · JFK 23:17
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1