在開發Linux的程序時,例如游戲服務器,有時會異常終止或者崩潰,此時沒有任何日志,也不能定位到崩潰代碼的位置,有些老手會告訴你去查看coredump,那什么是coredump, 又怎么查看呢?這里就跟大家講一講
什么是coredump
coredump是程序異常終止或崩潰時,操作系統將當時內存、寄存器、堆棧等數據記錄下,并保存在一個文件中,可以簡單理解成是一個快照文件
開啟coredump功能
如果不知道是否開啟coredump功能,可以在命令行中輸入:ulimit -c, 如果返回的結果是0,表示沒有開啟coredump。
oracle導入dmp文件步驟、開啟coredump的方法,可以輸入命令: ulimit -c size 開啟,size是文件大小,以blocks為單位,1個block為512bytes, 也可以設置成unlimited,表示不限制coredump文件的大小。
這種方法,只會在當前會話生效,可以將 ulimit 的命令加到 /etc/profile 中修改所有用戶的環境變量。
還可以修改 /etc/security/limits.conf 文件 和 在程序中使用 setrlimit 函數來設置,筆者沒有具體使用,這里就不詳細介紹
修改coredump的保存路徑
默認情況下,生成的coredump保存在可執行程序的當前目錄下, 文件名為core.
有時候程序可能會反復崩潰,這樣上次產生的coredump文件會被覆蓋掉,這種情況,可以通過修改coredump的文件名和路徑來解決,具體方法如下:修改 /proc/sys/kernel/core_uses_pid 文件,將內容改為1. 可以使用core文件名自動加上pid, 此時core文件名將變成core.pid, pid為進程的PID
oracle怎么導入dmp文件。修改 /proc/sys/kernel/core_pattern 文件,例如內容修改為:/tmp/core.e%.%p.%t , 即表示將core文件保存到 /tmp目錄,文件名為:core.可執行程序名稱.進程PID.時間戳
以下為文件名參數列表:%p - 進程的pid
%u - 當前的uid
%g - 當前的gid
%s - 產生coredump的信號
%t - 產生coredump的時間戳
oracle dump導入導出?%h - 主機名
%e - 可執行文件的名稱
查看coredump文件
查看coredump文件有很多工具,這里簡單講一下使用gdb查看
例如當程序 cli發生崩潰,產生coredump文件為core,可以使用下面的命令查看gdb -c ./core cli
然后輸入bt full, 就可以查看到詳細的調用棧,這樣就可以根據顯示的信息,找到崩潰的地方。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态