現象:
最近的linux中的openoffice服務進程運行一段時間后會自動停止,剛開始還以為忘了啟動執行自啟動腳本導致的。在連續出現前述情況后,開始查找應用程序崩潰的原因,首先查看linux服務器的內存使用情況:
free -m
顯示空閑內存是充足的,不存在內存不足情況,所以不是因為內存不足導致服務進程被系統進程killed的原因。因為linux服務器中,如果系統內存不足,會killed一些應用程序的進程。
下一步查看服務器運行日志,從日志中找出一些蛛絲馬跡
cd /var/log
可以看到message文件,這就是系統運行的日志。打開相關的message文件,搜索openoffice,發現了以下一段日志說明
Nov 13 13:56:48 test abrt[18890]: saved core dump of pid 11482 (/opt/openoffice4/program/soffice.bin) to /var/spool/abrt/ccpp-1447394202-11482.new/coredump (573923328 bytes) Nov 13 13:56:49 test abrtd: Directory 'ccpp-1447394202-11482' creation detected Nov 13 13:56:49 test abrtd: Size of '/var/spool/abrt' >= 1000 MB, deleting 'ccpp-1444992125-1504' Nov 13 13:56:49 test abrt[18890]: size of '/var/spool/abrt' >= 1250 MB, deleting 'ccpp-1444992125-1504' /opt/openoffice4/program/soffice: line 121: 11482 Aborted (core dumped) "$sd_prog/$sd_binary" "$@" Nov 13 13:56:49 test abrtd: Size of '/var/spool/abrt' >= 1000 MB, deleting 'ccpp-1445246374-1907' Nov 13 13:56:49 test abrtd: New crash /var/spool/abrt/ccpp-1447394202-11482, processin
從上面的日志可以看出,openoffice運行錯誤記錄到
/var/spool/abrt/ccpp-1447394202-11482.new/coredump
進入/var/spool/abrt, 可以看到幾個目錄
ccpp-1436301918-8428 ccpp-1446462729-2232 ccpp-1446462729-2232.new ccpp-1447394202-11482
他是根據應用程序的pid生成的目錄,比如8428就是openoffice運行時的pid。由於每個目錄中都有一個coredump文件。如果coredump文件大小之和超過1G之后,便會導致后續應用程序運行錯誤時的coredump文件無法生成。將上訴含有pid的目錄暫時遷移到空閑的空間中,然后再啟動openoffice服務,跟蹤運行情況生成錯誤信息
Nov 13 19:12:15 test abrt[10039]: saved core dump of pid 2232 (/opt/openoffice4/program/soffice.bin) to /var/spool/abrt/ccpp-1446462729-2232.new/coredump (296034304 bytes) Nov 13 19:12:15 test abrtd: Directory 'ccpp-1446462729-2232' creation detected Nov 13 19:12:16 test abrtd: New crash /var/spool/abrt/ccpp-1446462729-2232, processing
在/var/spool/abrt/目錄中執行openoffice服務自啟動程序,結果出現
shell-init: error retrieving current directory: getcwd: cannot access parent directories: chdir: error retrieving current directory: getcwd: cannot access parent directories:
網上查詢了,該錯誤表示 getcwd 命令無法定位到當前工作目錄,出現這種情況的原因有:
- 服務啟動文件不存在
- 當前運行用戶沒有權限
於是使用cd退出當前目錄,重新執行service命令,成功。
最后追蹤發現用戶上傳的一個文檔文件很大,因而導致openoffice進行轉換的時候導致服務崩潰。
參考資料
- http://blog.csdn.net/wen0006/article/details/3945845