[Linux] 使用 bash shell 監測某個 daemon 的執行緒數量

[Linux] 使用 bash shell 監測某個 daemon 的執行緒數量

最近需要用 bash shell 寫一個小程式,來監視某隻 daemon 的執行緒數量是否有減少~

問題的起源是因為這隻 daemon 的某個執行緒會突然掛掉,

可是整個 daemon 還是會繼續執行,只是有部分功能失效了…

在還沒找到掛掉的原因之前,可以做的一個補救就是在看門狗程式中,

如果發現執行緒數量不如預期時,就將 daemon 重新啟動~~

(聽起來很瞎吧~不過看門狗還真的是很常見的東西 :P)

 

首先,要如何查看執行緒的資訊呢?可以用 ps 加上 -T 的參數來查看~

例如下面我們想看 rsyslogd 的所有執行緒情形,

可以看到有 4 個執行緒,PID 都是 1608,但 SPID 也就是執行緒 ID 是不一樣的:

ps_grep

 

假設我們想在 rsyslogd 的執行緒數量少於 4 的時候,就自動重新啟動它的話,

可以寫成如下的 check_thread_num.sh:

#!/bin/sh

# Define the process name
process_name=rsyslogd

# Get minimum number of threads from command line parameters
process_min_threads=$1

# Calculate number of threads for the given process name
num_threads=`ps -e -T -f | grep ${process_name} | grep -v “grep” | wc -l`

# Restart process when thread count is less than expected
if [ ${num_threads} -lt ${process_min_threads} ]; then

    echo “Need to restart ${process_name} since current thread num ${num_threads} is less than ${process_min_threads}

fi
 

 

執行這個 shell 程式的語法如下:

sh check_thread_num.sh 4

 

執行結果如下,當指定的最小執行緒數量小於等於 4 的時候,

因為 rsyslogd 的目前執行緒有 4 根,因此程式沒有檢查出問題。

當指定的最小執行緒數量大於 4 的時候,就會檢查出問題,並且顯示要重新啟動的訊息~

ps_check  

 

 

(本頁面已被瀏覽過 155 次)

發表迴響

你的電子郵件位址並不會被公開。