Oracle Linux - Javaハングスレッド警告スクリプト

Oracle Linux - Javaハングスレッド警告スクリプト

Linuxオペレーティングシステム(特にOracle LinuxおよびRHEL)で実行するようにWebLogic Serverブレークスレッド警告スクリプトを編集しようとしています。

オンラインでさまざまなスクリプトを見て、以下のように一部編集して準備しました。

私の目標は、つまっているスレッドの総数を見つけて、jstackこの数が0より大きい場合は、各Javaプロセスに対してそれぞれかかったスレッドの詳細(ホスティングサーバー名を含む)を含む電子メールを送信することです。中断されたスレッドがない場合は、OKAYファイルに書き込み、スクリプトが再実行されるのを待ちます。

checkstucklog=/home/weblogic/lastStuckCheck.log
DATE=`date +"%Y_%m_%d %H:%M:%S"`
#count="$(ps -ef | grep Dweblogic | cut -c 10-15 | tr -d ' ' | xargs jstack -F | tee /home/weblogic/msALL_stuck.log_`/usr/bin/date +\%m-\%d-\%y-\%H-\%M` | grep STUCK | wc -l)"
count="$(ps -ef | grep Dweblogic | cut -c 10-15 | tr -d ' ' | xargs jstack -F -l | tee /home/weblogic/msALL_stuck_$DATE.log | grep STUCK | wc -l)"

if [ $count > 0 ]
then
  echo "\n Server has stuck threads" `/usr/bin/date +\%m-\%d-\%y-\%H-\%M` | mail -s 'STUCK thread on server' your_mail_address@mail_address.com > $Sfile
else
  echo "\n Stuck Thread Status = OKAY" > $checkstucklog
fi
exit

しかし、私はbashスクリプトに少し弱いです。次のスクリプトが機能するのに役立ちますか?

  • 私はスクリプトを正しい方法で書いていますか?
  • Tシャツの代わりに他の代替品を製造できますか?

まだ中断されたスレッドがないため、このスクリプトの機能を確認できません。しかし、私はこれがうまくいかないと思います。オペレーティングシステムのプロセス内では、ホスティングサーバー名を印刷する方法が見つかりません。

答え1

もう一度考えてみるべきことをいくつかお知らせします。

待ち行列:

count="$(ps -ef | grep Dweblogic | cut -c 10-15 | tr -d ' ' | xargs jstack -F -l | tee /home/weblogic/msALL_stuck_$DATE.log | grep STUCK | wc -l)"

DATE内部にスペースがある変数を使用してください。 (空白の代わりに別の文字を使用して)このように生成する方が良いでしょう。

DATE=`date +"%Y_%m_%d_%H:%M:%S"`

一部を削除するためにコマンドを再作成することもできますawk

count="$(ps -ef | awk '/Dweblogic/ {print $2}' | xargs jstack -F -l | tee /home/weblogic/msALL_stuck_$DATE.log | grep STUCK | wc -l)"

jstackコマンドについて:Weblogicを使用するときは、Oracle java(同じ会社の製品)を使用するのが賢明です。 Oracle Javaにはjstackそのようなオプションはありません-F

私はOracle Javaが商用製品であることを知っていますが、私が覚えている限り、Oracle製品(この場合はWebLogic)を使用してJavaを無料で使用できます。ただし、この場合は法務部に連絡するのが最善です(ライセンス契約の確認)。

数値を比較するときにbash推奨される形式は次のとおりです。

if [ "$count" -gt 0 ]

良い方法は、変数を二重引用符で囲むことです。特に、変数が動的に生成される場合はさらにそうです。

関連情報