- 环境
- 问题现象
- 问题分析
- jps工作原理
- 问题解决
- 注意事项
| 组件 | 版本 |
|---|---|
| JDK | 1.8 |
| Tomcat | 9.0.64 |
| 操作系统 | window 11 |
将Tomcat注册成服务后,通过jps命令查找不到进程,但是在windows资源管理器中可以看到进程,同时使用jstat命令提示not fount,但是jstack命令正常,如下图:
-
Tomcat启动
-
系统访问正常
-
Windows资源管理器中可以看到进程信息
-
通过jsp命令找不到进程
-
jstat -gcutil 9912命令提示not fount
-
jstack 9912命令正常
- 从上的一系列截图中可以确认,服务确实已经启动。
- jstack命令可以正常使用,但是jps命令不正常,说明这两个命令的原理不一样
- 了解一下jps命令的原理
jps的工作原理其实也不复杂,jvm启动后,会在C:Users用户AppDataLocalTemphsperfdata_用户下成pid文件,jps读的就这这个目录下的文件。
现在这个目录是空的,所以jps查询后,也查不到信息。当我启动idea(idea是java服务)后,这个目录下会生成idea的pid文件。就像这样:
然后通过jps -v,就可以查到idea的进程了
给【hsperfdata_用户名】文件夹受权即可
权限设置好后,再启动Tomcat服务,就可以在hsperfdata_下看到pid文件了
然后jps命令也正常了
jstat -gcutil 9296也正常了
- 只要jps命令出现问题,需要第一时间排查目录C:Users用户AppDataLocalTemphsperfdata_用户
- 安装服务时,一定要指定用户名,同时,用户名一定得是当前登录用户的用户名,如:service install tomcat9 --user xxx
- 服务启动时,不要去服务管理里直接启动,在命令行里用start tomcat9启动



