現在実行中の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を使用して-E
EREと\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