溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

linux不產(chǎn)生core文件怎么解決

發(fā)布時間:2021-11-24 11:32:42 來源:億速云 閱讀:692 作者:iii 欄目:建站服務(wù)器

本篇內(nèi)容介紹了“l(fā)inux不產(chǎn)生core文件怎么解決”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

linux不產(chǎn)生core文件的解決辦法:1、檢查Core dump的目錄是否存在并設(shè)置進(jìn)程對該目錄有寫權(quán)限;2、檢查服務(wù)程序是否調(diào)用seteuid();3、設(shè)置足夠大的Core文件大小限制;4、修改profile等等。

linux不產(chǎn)生core文件怎么解決

本文操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。

linux不產(chǎn)生core文件怎么辦?為什么沒有產(chǎn)生core 文件?

一、要保證存放Core dump的目錄存在且進(jìn)程對該目錄有寫權(quán)限。

存放Core dump的目錄即進(jìn)程的當(dāng)前目錄,一般就是當(dāng)初發(fā)出命令啟動該進(jìn)程時所在的目錄。但如果是通過腳本啟動,則腳本可能會修改當(dāng)前目錄,這時進(jìn)程真正的當(dāng)前目錄就會與當(dāng)初執(zhí)行腳本所在目錄不同。這時可以查看"/proc/<進(jìn)程pid>/cwd"符號鏈接的目標(biāo)來確定進(jìn)程真正的當(dāng)前目錄地址。通過系統(tǒng)服務(wù)啟動的進(jìn)程也可通過這一方法查看。

二、若程序調(diào)用了seteuid()/setegid()改變了進(jìn)程的有效用戶或組,則在默認(rèn)情況下系統(tǒng)不會為這些進(jìn)程生成Core dump。

很多服務(wù)程序都會調(diào)用seteuid(),如MySQL,不論你用什么用戶運(yùn)行mysqld_safe啟動MySQL,mysqld進(jìn)行的有效用戶始終是msyql用戶。如果你當(dāng)初是以用戶A運(yùn)行了某個程序,但在ps里看到的這個程序的用戶卻是B的話,那么這些進(jìn)程就是調(diào)用了seteuid了。為了能夠讓這些進(jìn)程生成Coredump,需要(echo "1" > /proc/sys/kernel/suid_dumpable)。

三、這個一般都知道,就是要設(shè)置足夠大的Core文件大小限制了。

程序崩潰時生成的Core文件大小即為程序運(yùn)行時占用的內(nèi)存大小。但程序崩潰時的行為不可按平常時的行為來估計(jì),比如緩沖區(qū)溢出等錯誤可能導(dǎo)致堆棧被破壞,因此經(jīng)常會出現(xiàn)某個變量的值被修改成亂七八糟的,然后程序用這個大小去申請內(nèi)存就可能導(dǎo)致程序比平常時多占用很多內(nèi)存。因此無論程序正常運(yùn)行時占用的內(nèi)存多么少,要保證生成Core文件還是將大小限制設(shè)為unlimited為好。

四、在/etc/profile中添加:

ulimit -c unlimited > /dev/null 2?&1

五、一般在 CLI 上啟動的程序,如果設(shè)置:

ulimit -c unlimited

就可以在程序以外終止時生成 core dump 文件。但是對于 daemon 方式運(yùn)行的程序,其與 CLI 啟動的程序的主要區(qū)別是進(jìn)程的運(yùn)行環(huán)境,其中就包括

cwd(current working directory)。如果以相對路徑方式定義 core 文件的格式,比如定義 /proc/sys/kernel/core_pattern 為:

core-%e-%p-%t

則一般來說,daemon 文件的 cwd 就是/,你可以通過/proc/<your_program_pid>/cwd來查看,一般都是連接到/目錄。而如果用戶對這個目錄沒有寫權(quán)限,那么就不會生成 core dump 文件了。

最直接的解決的方法,是修改/proc/sys/kernel/core_pattern為絕對路徑:/data/coredump/core-%e-%p-%t

并且保證這樣就基本 OK 了。

修改/proc/sys/kernel/core_pattern文件中的 core dump 文件格式為絕對路徑,比如:

/data/coredump/core-%e-%p-%t

什么時候不產(chǎn)生core文件?

在下列條件下不產(chǎn)生core文件:

( a )進(jìn)程是設(shè)置-用戶-ID,而且當(dāng)前用戶并非程序文件的所有者;

( b )進(jìn)程是設(shè)置-組-ID,而且當(dāng)前用戶并非該程序文件的組所有者;

( c )用戶沒有寫當(dāng)前工作目錄的許可權(quán);

( d )文件太大。core文件的許可權(quán)(假定該文件在此之前并不存在)通常是用戶讀/寫,組讀和其他讀。

“l(fā)inux不產(chǎn)生core文件怎么解決”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI