JVM実行サマリーレポート

JVM実行サマリーレポート

現在実行中のJavaプロセスの要約を出力したいと思います。私が興味のあるフィールドは、PID、開始時間、最小ヒープ、最大ヘルプ、およびアプリケーション名です。 PIDと開始時間は常に同じ位置にあるため、awkは正常に動作します。ただし、JVMの起動に使用されるパラメータに応じて、最小ヒープ(-Xmsで始まりmで終わる)、最大ヒープ(-Xmxで始まりmで終わる)、およびJVMから収集できるアプリケーション名は次のとおりです。 。 -Djboss.server .base で始まるフィールドは別の場所で終了するため、awk の位置番号が一致しません。これはほとんどのプロセスに適用されるアプローチです。 ps出力で最小/最大ヒープとアプリケーション名を見つけるためにこれをどのように改善できますか?

ps -ef |grep "D\[S" |awk '{printf "%5s %5s %9s %9s %-35s\n",$2, $5, $(NF-16), $(NF-15), $(NF-2)}' | \
sed 's/-Djboss.server.base.dir=\/usr\/share\/jboss-as\///g' |  sed 's/-standalone//g' | \
sort -k5 | tee /dev/stderr | wc -l | sed -e '$s/$/ JBoss JVMs running/'

期待される出力

715456 11:13  -Xms512m  -Xmx512m app1  
721978 13:08  -Xms512m  -Xmx512m app2  
722824 13:16  -Xms128m  -Xmx128m app3  
562899 Feb15  -Xms512m  -Xmx512m app4  
655796 Feb16 -Xms1024m -Xmx1024m app5  
5 JBoss JVMs running  

ただし、一部のアプリケーションでは、ヒープサイズの場所と-Djboss.server.base修飾子が指定されていません。その場合、出力は正しくありません。たとえば、

620378 Feb16 -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman app6   

実行中のプロセスの例。

jboss     653349  653268  0 Feb16 ?        00:00:39 java -D[Standalone] -server -verbose:gc -Xloggc:/usr/share/jboss-as/witr_standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1024m -Xmx1024m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman,com.sun.crypto.provider -Djava.awt.headless=true -Djboss.modules.policy-permissions=true -Dorg.jboss.boot.log.file=/usr/share/jboss-as/witr_standalone/log/server.log -Dlogging.configuration=file:/usr/share/jboss-as/witr_standalone/configuration/logging.properties -jar /usr/share/jboss-as/jboss-modules.jar -mp /usr/share/jboss-as/modules org.jboss.as.standalone -Djboss.home.dir=/usr/share/jboss-as -Djboss.server.base.dir=/usr/share/jboss-as/witr_standalone -c standalone.xml  

期待される出力

653349 Feb16 -Xms1024m -Xmx1024m witr

答え1

次の場合は、GNU sedを使用して-EEREと\s/\S略語を有効にします[[:space:]]/[^[:space:]]

$ cat file | sed -E 's:\S+\s+(\S+)(\s+\S+){2}\s+(\S+).*(-Xms[0-9]+m).*(-Xmx[0-9]+m).*-Djboss\.server\.base\.dir[^ ]+/([^ ]+)_standalone.*:\1 \3 \4 \5 \6:'
653349 Feb16 -Xms1024m -Xmx1024m witr

明らかに上記では、提供したサンプル入力でテストするcat file以上のものを使用しています。ps -ef

$ cat file
jboss     653349  653268  0 Feb16 ?        00:00:39 java -D[Standalone] -server -verbose:gc -Xloggc:/usr/share/jboss-as/witr_standalone/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms1024m -Xmx1024m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman,com.sun.crypto.provider -Djava.awt.headless=true -Djboss.modules.policy-permissions=true -Dorg.jboss.boot.log.file=/usr/share/jboss-as/witr_standalone/log/server.log -Dlogging.configuration=file:/usr/share/jboss-as/witr_standalone/configuration/logging.properties -jar /usr/share/jboss-as/jboss-modules.jar -mp /usr/share/jboss-as/modules org.jboss.as.standalone -Djboss.home.dir=/usr/share/jboss-as -Djboss.server.base.dir=/usr/share/jboss-as/witr_standalone -c standalone.xml

関連情報