![如何知道哪个脚本/二进制文件/其他正在运行的进程?](https://linux22.com/image/136543/%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E5%93%AA%E4%B8%AA%E8%84%9A%E6%9C%AC%2F%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%2F%E5%85%B6%E4%BB%96%E6%AD%A3%E5%9C%A8%E8%BF%90%E8%A1%8C%E7%9A%84%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
从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
如何知道哪个脚本/二进制文件/其他正在运行该进程?
答案1
对于 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 时高度依赖于应用程序。