進程總是被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