Linux OOM

我司的项目使用到了influxdb时序数据库。项目使用influxdb-java对influxdb进行操作,然后有一天数据读写出现异常了

org.influxdb.InfluxDBIOException: java.net.SocketTimeoutException: timeout
        at org.influxdb.impl.InfluxDBImpl.execute(InfluxDBImpl.java:514) ~[market_data_fetcherd.jar:na]
        at org.influxdb.impl.InfluxDBImpl.write(InfluxDBImpl.java:312) ~[market_data_fetcherd.jar:na]
        at ewhine.tools.InfluxDBUtil.execWrite(InfluxDBUtil.java:77) ~[market_data_fetcherd.jar:na]
        at ewhine.dataprocessor.DataUploader.realtimeUpload(DataUploader.java:171) [market_data_fetcherd.jar:na]
        at ewhine.actor.RealtimeDataUploaderActor.onReceive(RealtimeDataUploaderActor.java:68) [market_data_fetcherd.jar:na]
        at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165) [market_data_fetcherd.jar:na]
        at akka.actor.Actor$class.aroundReceive(Actor.scala:502) [market_data_fetcherd.jar:na]
        at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95) [market_data_fetcherd.jar:na]
        at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526) [market_data_fetcherd.jar:na]

我司的服务器使用的是阿里云,此时ssh上去进行操作,发现系统卡住了。我司的网站也部署再此阿里云服务器上,此时访问网站是可以访问的。当时登录阿里云控制台重启了系统,事后查看日志也没有发现什么。

最近对kotlin深感兴趣,决定将项目中的部分代码转为kotlin试试,由于ant配置kotlin不太方便,于是换了gradle来进行项目管理,正是踩到了gradle的一个坑,才重现了之前influxdb挂掉的现象。

gradle编译项目会启动一个gradle-deamon后台常驻进程。我在阿里云上频繁的进行gralde编译操作,最后竟然导致系统卡了.......然后复现了influxdb读写异常的错误。

qwweb@webserver:~$ free -mh
              total        used        free      shared  buff/cache   available
Mem:           992M        342M        106M        2.8M        543M        498M

后来多次启动gradle并实时查看内存情况,发现编译代码的时候内存不断减少,最终减少到0!此时也没有交换空间可用,所以导致了OOM,系统选择将influxdb杀死以释放内存!

  • 关于系统OOM时选择目标进程进行kill的方法 oom-killer机制介绍
    image.png
  • 查看influxdb的oom_score,可见其值相当大
qwweb@webserver:~$ ps aux | grep influxdb
influxdb 21950  0.4 16.5 576864 167940 ?       Ssl  16:28   1:07 /usr/bin/influxd -config /etc/influxdb/influxdb.conf
qwweb    24186  0.0  0.0  14196   948 pts/1    S+   20:41   0:00 grep influxdb
qwweb@webserver:~$ cat /proc/21950/oom_
oom_adj        oom_score      oom_score_adj
qwweb@webserver:~$ cat /proc/21950/oom_score
55
  • 查看oom_socre的排序脚本
#!/bin/bash
for proc in $(find /proc -maxdepth 1 -regex '/proc/[0-9]+'); do
    printf "%2d %5d %s\n" \
        "$(cat $proc/oom_score)" \
        "$(basename $proc)" \
        "$(cat $proc/cmdline | tr '\0' ' ' | head -c 50)"
done 2>/dev/null | sort -nr | head -n 10
qwweb@webserver:~$ sh oom_score.sh
55 23918 /usr/lib/jvm/java-8-oracle/bin/java -server -Xms64
42   736 /usr/sbin/mysqld
38 21950 /usr/bin/influxd -config /etc/influxdb/influxdb.co
36 21897 /lib/systemd/systemd-journald
 2 24158 sshd: qwweb [priv]
 2 24052 sshd: qwweb [priv]
 2   731 /usr/bin/redis-server 127.0.0.1:6379
 1 24179 -bash
 1 24178 sshd: qwweb@pts/1
 1 24135 bash
  • 要解决或者降低OOM发生的概率,有两种方法,一是增加系统内存,二是设置交换空间
  • 设置交换空间
# 生成交换文件2G
dd if=/dev/zero of=/mnt/swap bs=100M count=20
# 格式化为交换文件系统
mkswap /mnt/swap
#
chmod 600 /mnt/swap
# 挂载
swapon /mnt/swap
# 使系统重启时也生效,vim /etc/fstab
/mnt/swap   swap  swap  defaults  0 0
  • free -mh
qwweb@webserver:~$ free -mh
              total        used        free      shared  buff/cache   available
Mem:           992M        368M         69M        2.8M        553M        470M
Swap:          2.0G        102M        1.9G
  • gradle-deamon长期占用内存也需要解决,即编辑项目下gradle.properties
$ cat gradle.properties
# 不要以后台deamon方式执行
org.gradle.daemon=false
# 并行编译
org.gradle.parallel=true
  • 控制交换空间使用频率
echo 40 >  /proc/sys/vm/swappiness
image.png
  • 经过这次实践,发现交换空间真的很好用,可以极大的降低极端情况下系统杀死某些重要进程以释放内存的概率。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容