Linux

如何知道哪個腳本/二進制/其他正在執行的程序?

  • July 8, 2018

ps -ef | grep java中,我看到許多這樣的過程會佔用大量記憶體。

hadoop-+ 65369 65322  0 Jul06 ?        00:01:45 /usr/jdk64/jdk1.8.0_112/bin/java -Xmx8024m -Dhdp.version=2.6.4-091 -Djava.net.preferIPv4Stack=true -Dhdp.version=2.6.4-091 -Dhadoop.log.dir=/var/log/hadoop/hadoop-qa -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/usr/hdp/2.6.4-091/hadoop -Dhadoop.id.str=hadoop-qa -Dhadoop.root.logger=INFO,console -Djava.library.path=:/usr/hdp/2.6.4-091/hadoop/lib/native/Linux-amd64-64:/usr/hdp/2.6.4-091/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Xmx8024m -Xmx8024m -Djava.util.logging.config.file=/usr/hdp/2.6.4-091/hive/conf/parquet-logging.properties -Dlog4j.configuration=beeline-log4j.properties -Dhadoop.security.logger=INFO,NullAppender org.apache.hadoop.util.RunJar /usr/hdp/2.6.4-091/hive/lib/hive-beeline-1.2.1000.2.6.4-091.jar org.apache.hive.beeline.BeeLine -u jdbc:hive2://master01.sys7643.com:10000/;transportMode=binary -e

如何知道哪個腳本/二進制/其他正在執行這個程序?

對於 Java 應用程序,輸出的部分始終ps -ef如下所示:

org.apache.hive.beeline.BeeLine

這是一個與 Hive 相關的過程,這是此處顯示的 Java 類結構。鑑於 Java 應用程序通常如何呼叫自身的可變性,很難以程式方式解析它,因此您基本上必須學會從ps -ef輸出中直覺地解析它。

您可以嘗試使用類似這樣的方法來解析輸出:

$ ps -ef |   sed 's/-D[^ ]*//g;s/-X[^ ]*//g;s#^.*/bin/java##g;s/[^ ]*.jar//g;s/^[ ]*//g'
org.apache.hadoop.util.RunJar  org.apache.hive.beeline.BeeLine -u jdbc:hive2://master01.sys7643.com:10000/;transportMode=binary -e
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

這讓你大部分時間都在那裡,最後一點要解析出來,因為它們在處理 Java 時高度依賴於應用程序。

引用自:https://unix.stackexchange.com/questions/454161