为什么 systemd-resolve 会杀死我的 java 服务器?

为什么 systemd-resolve 会杀死我的 java 服务器?

我遇到了这个问题,每隔几天我的一个 Java 服务器就会死机。为了找出原因,我运行了以下程序,cat /var/log/syslog结果如下:

Sep 21 06:36:24 ip-172-31-42-5 systemd-timesyncd[16235]: Network configuration changed, trying to establish connection.
Sep 21 06:36:24 ip-172-31-42-5 systemd-timesyncd[16235]: Synchronized to time server 91.189.91.157:123 (ntp.ubuntu.com).
Sep 21 06:46:45 ip-172-31-42-5 systemd[1]: Starting Daily apt upgrade and clean activities...
Sep 21 06:47:35 ip-172-31-42-5 kernel: [5731409.370359] systemd-resolve invoked oom-killer: gfp_mask=0x14200ca(GFP_HIGHUSER_MOVABLE), nodemask=(null), order=0, oom_score_adj=0
...(skipping a bunch) ...
Sep 21 06:47:35 ip-172-31-42-5 kernel: [5731409.370580] Out of memory: Kill process 28251 (java) score 368 or sacrifice child
Sep 21 06:47:35 ip-172-31-42-5 kernel: [5731409.374244] Killed process 28251 (java) total-vm:2613628kB, anon-rss:178048kB, file-rss:0kB, shmem-rss:0kB
Sep 21 06:47:35 ip-172-31-42-5 kernel: [5731409.403233] oom_reaper: reaped process 28251 (java), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB

看完之后这个帖子,我了解到,如果任何进程试图分配过多内存,oom_reaper 将终止使用内存最多的进程。所以,我猜systemd-resolve正在尝试请求大量内存,然后收割者正在杀死我可怜的 java 进程。

我可以按照上述链接中的建议进行设置来解决这个问题vm.oom_kill_allocating_task,但我正在尝试找出 systemd-resolve 尝试请求如此荒谬的内存量的根本原因。有人知道这里的根本问题是什么吗?

编辑:当 java 服务器运行时,内存使用量仅为 234M/460M

相关内容