我的任务是找出在Linux系统上运行的springboot应用程序的数量。所以我打算做的是,
1.获取所有java进程ID的
$ ps -aux|grep java然后,2.以某种方式从ID中获取加载的类。
我不知道这是否可能。P.S.:我正在使用java在Process类的帮助下运行上述命令,如下所示:
Process process = Runtime.getRuntime().exec("ps -ef");所以我想通过一个java项目来完成它。
发布于 2021-06-14 19:53:07
我来到这个页面,寻找“如何找到是否加载了一个jar”的食谱(这与最初的问题有点不同)。但也许它会对某些人有用:
我发现jcmd是获取这些信息的最佳方法,例如:
$ jps 
1 MyAppLauncher
529 Jpsjcmd为这个JVM提供了哪些选项:[eceuser@ecs1-0 temp]$ jcmd 1 help
1:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
VM.classloader_stats
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.finalizer_info
GC.heap_info
GC.run_finalization
GC.run
VM.uptime
VM.dynlibs
VM.flags
VM.system_properties
VM.command_line
VM.version
helpVM.dynlibs做了我需要的事情:$ jcmd 1 VM.dynlibs | grep custom
7f59a4b3b000-7f59a4b3d000 r--s 00000000 fd:00 1116085962                 /home/app/lib/custom-fi-extensions-0.0.1-SNAPSHOT.jar所以是的,这个罐子已经装好了。
发布于 2019-04-17 09:55:37
id (如$ps aux | grep -i com.app.app.demo )获取应用程序。在Java调用Runtime.getRuntime().exec("ps aux | grep -i com.app.app.demo");我更喜欢使用ProcessBuilder (来自Java 8),并通过bash运行命令:
Process process = new ProcessBuilder().command("bash", "ps aux | grep com.app.app.demo").start()希望这能给你个主意。
发布于 2019-04-17 10:13:45
快速而肮脏的方法:将静态块放入类中,并在其中将某些内容打印到日志(或system.out)中。静态块是在类加载器加载类时执行的,而不是在第一个实例实例化时执行的(这是第一次调用构造函数时)。然后,如果您的打印输出在日志中,那么类已经加载。示例:
public class Sample {    private static final Logger logger = ...    static {       logger.info("class Sample is loaded");    } ... }
https://stackoverflow.com/questions/55724696
复制相似问题