进程总是被killed


没解决

 

https://github.com/portainer/portainer/issues/1961

dmesg简介

dmesg’命令显示linux内核的环形缓冲区信息,我们可以从中获得诸如系统架构、cpu、挂载的硬件,RAM等多个运行级别的大量的系统信息。当计算机启动时,系统内核(操作系统的核心部分)将会被加载到内存中。在加载的过程中会显示很多的信息,在这些信息中我们可以看到内核检测硬件设备。 

列出加载到内核中的所有驱动

我们可以使用如‘more’。 ‘tail’, ‘less ’或者‘grep’文字处理工具来处理‘dmesg’命令的输出。由于dmesg日志的输出不适合在一页中完全显示,因此我们使用管道(pipe)将其输出送到more或者less命令单页显示。

dmesg | more
dmesg | less

列出所有被检测到的硬件

dmesg | grep sda

注解 ‘sda’表示第一块 SATA硬盘,‘sdb’表示第二块SATA硬盘。若想查看IDE硬盘搜索‘hda’或‘hdb’关键词。

只输出dmesg命令的前20行日志

dmesg | head -20

只输出dmesg命令最后20行日志

在‘dmesg’命令后跟随‘tail’命令(‘ dmesg | tail -20’)来输出‘dmesg’命令的最后20行日志,当你插入可移动设备时它是非常有用的。

dmesg | tail -20

搜索包含特定字符串的被检测到的硬件

由于‘dmesg’命令的输出实在太长了,在其中搜索某个特定的字符串是非常困难的。因此,有必要过滤出一些包含‘usb’ ‘dma’ ‘tty’ ‘memory’等字符串的日志行。grep 命令 的‘-i’选项表示忽略大小写。

dmesg | grep -i usb
dmesg | grep -i dma
dmesg | grep -i tty
dmesg | grep -i memory

清空dmesg缓冲区日志

我们可以使用如下命令来清空dmesg的日志。该命令会清空dmesg环形缓冲区中的日志。但是你依然可以查看存储在‘/var/log/dmesg’文件中的日志。你连接任何的设备都会产生dmesg日志输出。

dmesg -c

实时监控dmesg日志输出

在某些发行版中可以使用命令‘tail -f /var/log/dmesg’来实时监控dmesg的日志输出。

watch "dmesg | tail -20"

参数说明

total-vm:31354724kB, anon-rss:30636060kB, file-rss:476kB, shmem-rss:0kB
  • RSS代表“驻留集大小”,即当前在进程中为RAM分配的内存量。
  • anon-rss值为30636060kBkB.
  • file-rss是交换文件中对于该系统中所有进程为0KB的内存量。

查看信息:

可以输出最近killed的信息。

dmesg | egrep -i -B100 'killed process'

## 或:
egrep -i 'killed process' /var/log/messages
egrep -i -r 'killed process' /var/log

## 或:
journalctl -xb | egrep -i 'killed process'

时间戳转时间

dmesg -T | head -10

设定kill优先度:

(1)完全关掉oom(不建议):

sysctl vm.overcommit_memory=2
echo “vm.overcommit_memory=2” >> /etc/sysctl.conf

(2)出现 Out of memory之后重启:

sysctl vm.panic_on_oom=1
sysctl kernel.panic=X
echo “vm.panic_on_oom=1” >> /etc/sysctl.conf
echo “kernel.panic=X” >> /etc/sysctl.conf

(3)优先考虑kill这个进程:

sudo echo 10>/proc/[PID]/oom_adj

(4)尽量不去kill这个进程:

sudo echo -15>/proc/[PID]/oom_adj

(5)不会kill这个进程:

sudo echo -17>/proc/[PID]/oom_adj

oom_adj的值在-16 到 +15之间,值越高被kill的优先度越高。当该值为-17时,系统将不会杀死指定pid的进程,而-16~15则会使得进程的/proc/[pid]/oom_adj值呈指数()形式递增,即它们被杀掉的可能性呈指数递增。针对init(进程号为1)这个进程,无论该值设为多少都不会被杀。

3.若拒绝访问:
命令改为:

bash -c "echo '10' | tee /proc/[PID]/oom_adj"
bash -c "echo '-15' | tee /proc/[PID]/oom_adj"
bash -c "echo '-17' | tee /proc/[PID]/oom_adj"

centos系统内存 buff/cache 占用过高

情况说明: centos系统,buff/cache占用过高,导致服务器内存居高不下,但是通过top查看系统进程并无过多占用内存

实际情况:

处理步骤:
1.执行sync命令;

sync

2.执行释放内存命令:

echo 3 > /proc/sys/vm/drop_caches

命令解释:

sync 指令会将存于 buffer 中的资料强制写入硬盘中。
echo 1 > /proc/sys/vm/drop_caches:表示清除pagecache。
echo 2 > /proc/sys/vm/drop_caches:表示清除回收slab分配器中的对象(包括目录项缓存和inode缓存)。
echo 3 > /proc/sys/vm/drop_caches:表示清除pagecache和slab分配器中的缓存对象。

原文地址:https://blog.51cto.com/liujingyu/2448135,作者:刘景宇

参考地址:

linux 程序被Killed,查看原因:https://blog.csdn.net/zbzcDZF/article/details/90488442

Linux系统中‘dmesg’命令处理故障和收集系统信息的7种用法: https://linux.cn/article-3587-1.html

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM