在 Linux 上使用 jps 命令检查 Java 进程 | Linux 中国

坦白说,在Linux上使用jps命令其实是相当简单的。
该命令由OpenJDK提供,主要用于快速扫描并识别系统上运行的所有JVM实例。
我们先来说说最重要的事情。
使用 jps 的基本方法是直接在终端中输入“jps”并按 Enter 键。
列出所有 Java 进程的 PID 以及相应的类或 Jar 文件名。
例如,在我去年运行的一个项目中,我用它来监控和识别问题。

还有一点是,如果想要获得更详细的输出,比如Java进程的启动参数等信息,可以使用“jps -v”选项。
这对我来说非常重要,因为它可以帮助我立即了解流程的详细状态。

起初我以为只有高权限用户才能运行jps并查看其他用户的进程,但事实并非如此。
但是等等,还有别的事情。
jps 可能需要相应的权限,特别是如果您想查看其他用户启动的 Java 进程。

最后,如果你觉得jps不直接、不准确,你还可以使用ps命令配合grep来查看Java进程。
例如,可以使用“ps aux | grep java”来列出包含“java”关键字的进程信息,但说实话,这种方法可能不如jps那么直观。

所以,我认为jps是一个在Linux上检查Java进程的实用工具。
您可以尝试一下,看看是否满足您的需求。

RASP | 远程Java应用的RASP调试教程

这就是远程 Java 应用程序的 RASP 调试的全部内容。

直接进入步骤。

Windows IDEA本地,Linux Tomcat远程。

1 . IDEA远程调试设置 打开配置,选择远程JVM调试。
使用Socket模式,输入远程服务器的IP地址并选择一个空闲端口,例如5 005 IDEA自动生成JVM参数并记录下来。

2 下断点 如果在 RASP 代码中设置断点,则必须设置 AgentMain 条目。
设置多个断点可以增加成功的概率。

3 编辑启动脚本 更改 Linux 中的 catalina.sh 和 Windows 中的 catalina.bat。
将 JAVA_OPTS 参数添加到标头并使用您刚刚为内容记下的 JVM 参数。

4 启动应用程序 重启Tomcat,使用lsof检查5 005 端口是否繁忙。

5 连接IDEA 单击“配置”即可开始。
如果成功,将显示“已连接”。
如果这不起作用,请先 ping 查看端口是否正在侦听以及防火墙是否可以访问。

6 注入RASP并启用断点 找到应用程序PID并用jrasp注入。
如果断点在AgentMain中,则会自动捕获。
如果没有,您需要发出请求或 RCE 来激活它。

这才是问题的关键。

RASP 按进程运行并由 Tomcat JVM 进行调试。

关键是没有源码,只是在RASP代码中设置断点。

如果要连接Tomcat,请添加依赖。
调试时可以查看RASP、JDK、Tomcat源代码。

优点是可以远程精准定位问题,效率高。

这是第一个。

Java虚拟机性能监控工具VisualVM的使用详细教程

你好,上次有客户问我如何使用VisualVM,让我有点忘记了。
我会很快向你解释。
让我们以我最近遇到的情况为例。

说一下我2 02 3 年在上海的一个项目上犯的一个陷阱,当时线上CPU飙升到9 0%,线上环境不好管理,所以拉到本地电脑,用VisualVM调试。
先说本地连接,很简单。

本地连接: 你安装了JDK吗?必须假装。
转到 JDK_HOME/bin,对于 Windows 是 jvisualvm.exe,对于 Linux/Mac 是 jvisualvm。
双击将其打开。
或者从命令行输入。
打开它后,它将扫描您本地运行的Java进程。
在左侧的“应用程序”面板中,当您看到进程的名称时,双击进入,它直接位于“监视器”选项卡上。

远程连接: 这在远程服务器上更容易使用。
例如,2 02 3 年,我将调试另一个项目,服务将在云服务器上。
您需要先更改Java启动脚本并添加参数。
像这样: 巴什 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9 01 0 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -java -jar your-application.jar
这个参数是关键。
-Dcom.sun.management.jmxremote 用于开门,后面的是门牌号和钥匙。
我通常使用9 01 0端口,但应该不会与其他端口冲突。
检查一下你的服务器是否被占用。
在我的测试环境中,身份验证和SSL都关闭了,但在线上必须将它们打开。
安全第一。
添加参数后,重新启动应用程序。

然后你在VisualVM中进行操作。
在左侧的应用程序面板中,右键单击“添加远程主机”并填写您的服务器的IP。
添加完后,在IP下右键,选择“添加JMX连接”,填写IP和端口,如9 01 0,点击连接。
如果无法连接,可能是防火墙屏蔽了端口,或者端口号错误,或者JMX绑定了内网IP。
目前,您可以添加 -Djava.rmi.server.hostname=your_server_reachable_ip 来强制 JMX 监视来自外部网络的可访问 IP。
我因为这个被卡了好久,搞了好久才发现是参数没有添加正确。

---
接下来我们来谈谈核心功能。
让我以监视器为例。
上次我在本地调试项目时,一打开VisualVM,CPU曲线就爆炸了。
我只是点击“PerformGC”按钮手动触发GC,看看内存曲线是否下降。
结果,记忆曲线保持不变,并继续增加。
这是非常可疑的。
如果CPU很高但内存不下降,那么基本上就是内存泄漏。

纱线: 2 02 3 年我在北京的另一个项目中会大量使用这个,项目的线程池崩溃了,导致了死锁。
我跑到“线程”选项卡,看到许多线程陷入“阻塞”状态。
VisualVM直接提示“Deadlock detector!”顶部的红色文字,我知道这是一个死胡同。
点击“ThreadDump”按钮,导出所有线程的堆栈信息。
我查看了堆栈,发现有几个线程正在等待同步锁,并开始陷入同一个方法中。
这意味着关键细节太精细或者竞争太激烈。
然后我改了代码,扩大了按键范围,问题就没有了解决了。

采样器: 我最近在杭州的一个项目中充分利用了这个功能。
该项目存在内存泄漏,但找不到来源。
我使用采样器的内存模式并运行示例一个小时。
事实证明,这是一个特定的缓存类,它不断创建对象但不释放它们。
这是一个可疑的内存泄漏。

简介: 这个功能比较强大,但是应用程序启动会比较慢。
最后一次用在深圳的一个高并发项目上。
CPU太高,导致Sampler提示是某种计算方式。
我用的是CPU Profiler模式,查了一下,原来是这个方法。
探查器还可以查看方法调用链,找出调用它们的人,并非常精确地找到它们。
但Profiler会占用资源,在生产环境中应谨慎使用。

不管怎样,一旦熟练使用这些函数,基本上就可以发现性能问题了。
只要多练习,多看曲线,多分析线程状态即可。

命令Linux中JPS命令的用法介绍linux中的jps

JPS 命令直接查看 Java 进程。

格式:jps [参数]。

-q 只查看 PID。
例如:jps -q。

-l 查看类名。
例如:jps -l。

-m 查看主类的参数。
例如:jps -m。

-v 查看详细的 JVM 参数。
例如:jps -v。

本机使用:jps。
例如:参见 PID 1 2 3 4
远程访问:jps
例如:jps 1 9 2 .1 6 8 .1 .1 00。

自己尝试一下。