国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

linux環(huán)境下查看因內(nèi)存占用過大被殺掉的進程

這篇具有很好參考價值的文章主要介紹了linux環(huán)境下查看因內(nèi)存占用過大被殺掉的進程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

最近發(fā)生兩次游戲服務(wù)器進程突然消失的事件,查詢?nèi)罩旧舷挛臎]有找到有用的信息,日志顯示運行到某處戛然而止,此處代碼邏輯簡單,排除異常邏輯導(dǎo)致的服務(wù)器進程崩潰,所以聯(lián)想到之前同一臺服務(wù)器上部署多個進程,因占用內(nèi)存太大被內(nèi)核殺死的情況,猜測本次也是這個原因。

查詢方法

通過搜索引擎找到了兩種查詢方法,一種是直接過濾系統(tǒng)日志,一種是借助 dmesg 命令,備注以下命令在 CentOS 7 上測試通過

通過系統(tǒng)日志查找

[root@demo]# grep "Out of memory" /var/log/messages
Apr  4 10:32:30 hk-dev kernel: Out of memory: Kill process 2434 (Game9) score 212 or sacrifice child
Apr  4 10:33:53 hk-dev kernel: Out of memory: Kill process 2476 (git) score 381 or sacrifice child
Apr  4 10:33:53 hk-dev kernel: Out of memory: Kill process 2777 (git) score 381 or sacrifice child

通過dmesg命令查找

[root@demo]# dmesg -T | grep "Out of memory"
[Mon Aug 30 12:06:25 2021] Out of memory: Kill process 22437 (git) score 400 or sacrifice child
[Wed Sep 22 20:23:52 2021] Out of memory: Kill process 29780 (Game6) score 161 or sacrifice child
[Wed Mar 29 15:54:31 2023] Out of memory: Kill process 29093 (git) score 388 or sacrifice child
[Tue Apr  4 10:24:05 2023] Out of memory: Kill process 2434 (Game9) score 212 or sacrifice child
[Tue Apr  4 10:25:29 2023] Out of memory: Kill process 2476 (git) score 381 or sacrifice child

進程被殺的原因

Linux 內(nèi)核有個機制叫OOM killer,全稱為 Out Of Memory killer,很形象的一個名字——內(nèi)存溢出殺手,這個機制會監(jiān)控那些占用內(nèi)存過大,尤其是瞬間占用內(nèi)存很快的進程,為防止機器內(nèi)存耗盡而主動把該進程殺掉。

當(dāng)內(nèi)核檢測到系統(tǒng)內(nèi)存不足、挑選并殺掉某個進程的過程可以參考內(nèi)核源代碼 linux/mm/oom_kill.c(2023-4-4 23:24:07確認(rèn)了此文件存在),當(dāng)系統(tǒng)內(nèi)存不足的時候,out_of_memory() 函數(shù)被觸發(fā),然后調(diào)用 select_bad_process() 函數(shù)選擇一個進程殺掉,這個選擇的過程是通過調(diào)用 oom_badness() 函數(shù)實現(xiàn)的,挑選的算法和想法都暴力但樸實:就是找到最占用內(nèi)存的進程。

源碼如下:

/**
 * oom_badness - heuristic function to determine which candidate task to kill
 * @p: task struct of which task we should calculate
 * @totalpages: total present RAM allowed for page allocation
 *
 * The heuristic for determining which task to kill is made to be as simple and
 * predictable as possible.  The goal is to return the highest value for the
 * task consuming the most memory to avoid subsequent oom failures.
 */
long oom_badness(struct task_struct *p, unsigned long totalpages)
{
	long points;
	long adj;

	if (oom_unkillable_task(p))
		return LONG_MIN;

	p = find_lock_task_mm(p);
	if (!p)
		return LONG_MIN;

	/*
	 * Do not even consider tasks which are explicitly marked oom
	 * unkillable or have been already oom reaped or the are in
	 * the middle of vfork
	 */
	adj = (long)p->signal->oom_score_adj;
	if (adj == OOM_SCORE_ADJ_MIN ||
			test_bit(MMF_OOM_SKIP, &p->mm->flags) ||
			in_vfork(p)) {
		task_unlock(p);
		return LONG_MIN;
	}

	/*
	 * The baseline for the badness score is the proportion of RAM that each
	 * task's rss, pagetable and swap space use.
	 */
	points = get_mm_rss(p->mm) + get_mm_counter(p->mm, MM_SWAPENTS) +
		mm_pgtables_bytes(p->mm) / PAGE_SIZE;
	task_unlock(p);

	/* Normalize to oom_score_adj units */
	adj *= totalpages / 1000;
	points += adj;

	return points;
}

總結(jié)

  • 如果你發(fā)現(xiàn)運行了一段時間的進程突然不見了,那可能是內(nèi)核嫉妒生恨把它給干掉了
  • 查詢內(nèi)存溢出被殺掉的進程可以直接通過系統(tǒng)日志來查 grep "Out of memory" /var/log/messages
  • 也可以通過專門的命令查找 dmesg -T | grep "Out of memory"
  • 剛剛看了linus 的 linux 代碼庫,昨天還在提交,真的是更新無止境
==>> 反爬鏈接,請勿點擊,原地爆炸,概不負責(zé)!<<==

做人一輩子 快樂沒幾天
一條大路分兩邊 隨你要走哪一邊
不怕不怕就不怕 我是年輕人
風(fēng)大雨大太陽大 我就是敢打拼文章來源地址http://www.zghlxwxcb.cn/news/detail-691723.html

到了這里,關(guān)于linux環(huán)境下查看因內(nèi)存占用過大被殺掉的進程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Linux查看進程實際占用內(nèi)存的幾種方式

    Linux查看進程實際占用內(nèi)存的幾種方式

    方式一 top -p pid RES :72296,使用的內(nèi)存為72296kb %MEM:1.9,進程占用了總內(nèi)存的1.9% 方式二 ps -aux | grep pid 顯示其他用戶啟動的進程(a) 查看系統(tǒng)中屬于自己的進程(x) 啟動這個進程的用戶和它啟動的時間(u) 方式三 cat /proc/pid/status

    2024年02月11日
    瀏覽(23)
  • Linux如何查看當(dāng)前占用CPU和內(nèi)存最多的進程

    查看占用 CPU 最高的前10個進程 查看占用內(nèi)存(MEM)最高的前10個進程 輸入 top 命令,然后按下大寫M按照內(nèi)存MEM排序,按下大寫P按照CPU排序

    2024年02月17日
    瀏覽(22)
  • MacOS怎么查看進程占用內(nèi)存是多少

    MacOS怎么查看進程占用內(nèi)存是多少

    在Linux下可以使用 free 命令來方便的查看內(nèi)存占用情況,如 free -g、free -m等,但MacOS下沒有這個命令。 既然如此,那么MacOS里是否有類似的工具呢? 而我們又該如何查看整個PC的內(nèi)存占用情況,及指定進程的內(nèi)存占用情況呢? 別急,帶著這些疑問請往下看: 1、通過 top 命令來

    2024年02月17日
    瀏覽(26)
  • (Linux)查看端口占用并關(guān)閉進程

    更多請參考:Linux netstat命令 kill 命令將信號發(fā)送到指定的進程或進程組,使它們根據(jù)該信號進行操作。未指定信號時,默認(rèn)為 -15 參考:Linux中的Kill命令

    2024年02月17日
    瀏覽(23)
  • linux中查看占用端口的進程方法

    linux中查看占用端口的進程方法

    其中:95115是進程號,mysqld是進程名稱 注意:-tlnp和-ltnp 其中:mysqld是進程名稱,95115是進程id 其中:mysqld是進程,95115是進程id

    2024年04月10日
    瀏覽(31)
  • linux怎么查看端口被哪個進程占用

    linux怎么查看端口被哪個進程占用

    兩種查看方法(例如80端口): 1、使用fuser命令,可以直接在Linux上查看指定端口被哪個進程占用了,語法為“fuser -v 80/tcp”,運行結(jié)果里會包含進程的名字和id。 2、使用lsof命令,能根據(jù)指定端口找到對應(yīng)的進程信息,語法為“l(fā)sof -i:80”,可以在輸出結(jié)果中查看占用80端口的

    2024年02月13日
    瀏覽(31)
  • Linux如何查看文件進程占用-lsof

    lsof命令是什么? 可以列出被進程所打開的文件的信息。被打開的文件可以是 1.普通的文件,2.目錄 ?3.網(wǎng)絡(luò)文件系統(tǒng)的文件,4.字符設(shè)備文件 ?5.(函數(shù))共享庫 ?6.管道,命名管道?7.符號鏈接 8.底層的socket字流,網(wǎng)絡(luò)socket,unix域名socket 9.在linux里面,大部分的東西都是被當(dāng)做文

    2024年02月12日
    瀏覽(12)
  • Linux中查看端口被哪個進程占用、進程調(diào)用的配置文件、目錄等

    Linux中查看端口被哪個進程占用、進程調(diào)用的配置文件、目錄等

    1.查看被占用的端口的進程, netstat/ss -antulp | grep :端口號 2.通過上面的命令就可以列出,這個端口被哪些應(yīng)用程序所占用,然后找到對應(yīng)的進程PID 3.根據(jù)PID查詢進程。如果想詳細查看這個進程,PID具體是哪一個進程,可以通過命令的方式進行查看進程的詳細信息, ps -ef | gr

    2024年02月16日
    瀏覽(25)
  • 在linux中查看運行指定進程資源占用(cpu+gpu)

    在運行程序時有時候會需要查看資源占用,以方便部署在其他服務(wù)器上時進行參考。以下是總結(jié)了我在linux上查找程序進程資源的兩種方法(cpu和gpu都有)。 如果進程較多,輸入 ps -ef | grep + 指令 進行搜索。如果運行的是python程序,可以輸入 ps -ef | grep python3 比如我想

    2024年02月04日
    瀏覽(21)
  • Linux查詢內(nèi)存或CPU占用最多的幾個進程

    一、可以使用以下命令查使用內(nèi)存最多的10個進程 方法1: ps -aux | sort -k4nr | head -10 如果是最高的三個,10改為3即可 命令解釋:? 1. ps:參數(shù)a指代all——所有的進程,u指代userid——執(zhí)行該進程的用戶id,x指代顯示所有程序,不以終端機來區(qū)分。ps -aux的輸出格式如下: USER ?

    2024年04月17日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包