找出程式消失的“案發現場”
-
問題來源:
Kafka服務出現訪問異常
-
問題分析:
檢視Broker日誌,JVM程式在沒有任何異常的情況下,直接被呼叫shutdownhook,退出應用。
從Kafka服務來看,無法確診問題。通常此類狀態是由於OS中執行的監控管理程式或者其他服務傳送kill訊號將程式殺掉。如果能夠找出傳送訊號的程式,就可以進 一步分析原因。那麼如何查詢出“罪魁禍首”?
-
查詢“罪魁禍首”
The Linux Audit Subsystem is a system to Collect information regarding events occurring on the system(s) 。藉助OS審計日誌可以找出是否有其他程式,什麼程式,什麼時候對Kafka的Broker程式傳送什麼訊號導致Kafka的Broker程式退出。那麼該如何操作呢?
-
首先確保審計服務正常
使用 service auditd status 檢視審計服務的執行情況
如果執行異常,可使用service auditd restart 重啟服務 -
在審計服務中新增審計kill操作的審計規則
auditctl -a exit,always -F arch=b64 -S kill -S tkill -S tgkill -F a1!=0 -k my_temporary_kill_audit
新增完畢後,可以使用auditctl -l命令檢視是否新增成功[root@yj01 ~]# auditctl -l No rules [root@yj01 ~]# auditctl -a exit,always -F arch=b64 -S kill -S tkill -S tgkill -F a1!=0 -k my_temporary_kill_audit [root@yj01 ~]# auditctl -l -a always,exit -F arch=b64 -S kill,tkill,tgkill -F a1!=0x0 -F key=my_temporary_kill_audit
-
使用指令碼kill掉程式以便測試
[root@yj01 ~]# cat kill_test.sh #!/bin/bash p=`ps -ef | grep kafka.Kafka | grep -v grep | awk '{print $2}'` echo "kill ing kafka process $p" kill -9 $p echo $$ echo "killed"
-
測試審計日誌資訊
-
在kafka的broker程式所在節點執行test.sh,列印如下:
[root@yj01 ~]# date Mon Jan 28 10:55:46 CST 2019 [root@yj01 ~]# sh kill_test.sh kill ing kafka process 687802 688289 killed [root@yj01 ~]# date Mon Jan 28 10:55:50 CST 2019
-
檢視審計日誌記錄的kill資訊
使用命令ausearch -k my_temporary_kill_audit
檢視審計日誌,如下可以看出,被kill的程式為687802,與上述日誌列印的kafka程式號一致。起16進製為a7eba,與SYSCALl中中的a0一致,起a1表示接收到的為-9,即表示使用“kill -9”命令殺掉的kafka,Broker程式。而執行kill命令的程式為pid為688289,與上述指令碼中列印的命令一致。如上資訊可以說明是執行的kill_test.sh指令碼殺掉了Kafka的broker程式。
-
-
相關文章
- 找出消失的已引入的類庫
- Linux使用fuser命令找出訪問檔案系統的程式Linux
- hive迷案之消失的分割槽檔案Hive
- R - 讓消失的資料消失
- C# 程式找出檔案重複的行,計算函式執行的時間C#函式
- 找出Win 7系統中共享檔案的方法
- mac下將找出的檔案進行復制Mac
- 找出消耗CPU最高的程式對應的SQL語句SQL
- 用 pprof 找出程式碼效能瓶頸
- 轉載-找出Oracle alert檔案中的ORA錯誤Oracle
- IBM AI“新藥發現”專案停止市場擴充IBMAI
- 不要現場程式設計程式設計
- js找出陣列中出現最多的元素和次數JS陣列
- 加速發展的低程式碼市場
- 巧用檔案影像比較工具Kaleidoscope,幫您找出檔案的不同
- 365天的消失
- 如何在 Linux 中找出 CPU 佔用高的程式Linux
- [V8]找出可能影響效能的程式碼(模式)模式
- 如何找出兩個文字檔案中有相同欄位的行
- 軟體開發工作的第一現場
- 找出陣列中只出現一次的數字陣列
- 案發現場:被注入的軟體及 ORA-600 16703 災難的恢復
- 找出沒有繫結變數的引發硬解析的SQL變數SQL
- LINUX下找出哪個程式造成的IO等待很高的方法Linux
- 開啟maven專案之後,右邊的maven突然消失Maven
- weblogic程式自動消失解決方法WebC程式
- 如何在 Linux 中找出記憶體消耗最大的程式Linux記憶體
- SESSION處於KILLED狀態下如何找出對應的程式Session
- 找出那些程式碼裡的壞味道吧——《重構》筆記筆記
- 檢視資料庫中的鎖(LOCK),找出程式及SQL資料庫SQL
- Java 如何找出兩個文字檔案中有相同欄位的行Java
- 如何在 Linux shell 中找出所有包含指定文字的檔案Linux
- 如何在 Linux 中找出最近或今天被修改的檔案Linux
- 快速找出Linux下大於100M的檔案Linux
- 消失的遊戲祕籍遊戲
- 那些 “被消失” 的缺陷
- js中找出最大值程式碼例項JS
- Windows 根據埠號,找出檔案安裝位置Windows