-
ignal: killed 查了原因发现是内存不足的原因 ,我的服务器是1G的内存,那只用在服务器上分配swap分区就可以解决此问题。 Linux系统在安装的时候是可以分配swap分区的,但是我的服务器是预先安装好的系统。所以需要我们在系统运行的环境下解决这个问题。 创建要作为swap分区的文件:增加1GB大小的交换分区,则命令写法如下,其中的count等于想要的块的数量(bs*count=文件大小)。 dd if=/dev/zero of=/root/swapfile bs=1M count=1024 mkswap /root/swapfile #建立swap的文件系统 swapon /root/swapfile #启用swap文件 /root/swapfile swap swap defaults 0 0 如果要重新修改swap 分区内存 就需要先关闭正在使用的分区 关闭 分区命令 swapoff -a |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments
-
线上排查进程突然挂掉原因 |
Beta Was this translation helpful? Give feedback.
-
不同的操作系统,支持的信号可能略有差异,可以使用kill -l 查看系统所有的信号。下面是Linux上常见的信号以及处理机制 信号 值 处理动作 发出信号的原因 处理动作一项中的字母含义如下 A 缺省的动作是终止进程 |
Beta Was this translation helpful? Give feedback.
线上排查进程突然挂掉原因
对于线上应用,出现进程自动挂掉的原因,如果可以排除因程序本身原因,那么很大可能性是因为操作系统内存不够用,进程被操作系统kill掉了。
那如何确认是否是被操作系统kill掉的呢?
如果是因OutOfMemory被系统kill掉的进程,会在/var/log目录下的dmesg文件中留下最终的遗迹。可使用dmesg命令查看操作系统kill进程日记。
dmesg -T | grep -E -i -B100 'killed process'
1.
命令行执行输出如下(go进程)。
......
Out of memory: Kill process 28670 (bfe) score 386 or sacrifice child
Killed process 28670, UID 555, (bfe) total-vm:8478620kB, anon-rss:6149940kB, file-rss:4kB
1.
2.
3.
如果能知道挂掉的进程id,且在dmesg命令输出文本中找到,就能知道是否因内存原因被操作系统kill掉。
如果是虚拟机部署,建议在启动脚本中输出进程的id到文件存储,以便于后续问题排查。
此方法同样可以用于容器排查。
由于kubernetes的最小调度单元是Pod,如果只是容器重启,Pod不变,所在的物理机(虚拟机)就不变。而dmesg输出的是物理机(虚拟机)的操作系统kill进程日记,因此,虽然容器重启了,但我们还能使用dmesg命令查看进程被kill的原因。但需要注意,进程ID与容器内看到的进程ID是不同的。
一个容器部署的Java…