使用报错
# WebSocket (web socket 错误,请检查是否开启 ws 代理)
Jpom 中服务端和插件端通信方式有 http、WebSocket,http 主要传输一下基础操作、上传文件相关,WebSocket 主要用于一些需要实时传输的信息如:控制台日志、脚本执行日志等。
服务端中对接口也是采用 http+WebSocket 来实现,如果用户在使用中出现 WebSocket 连接错误或者控制台看不到任何信息时候:需要检查一下是否使用代理软件代理 Jpom 服务端或者插件端(如:nginx 代理)
如果使用了代理需要确认是否配置 WebSocket 相关配置
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
2
# Jps 命令异常
Jpom 针对 Java 程序状态监控采用 jps 命令,jps 在 jdk 中都默认包含一般不需要额外配置,如果出现插件端中提示 jps 命令异常等相关错误提示。
- 需要检查一下在服务器中能正常执行 jps 命令,不能正常执行需要检查 jdk 是否完整
- 需要检查插件端是否能正常加载环境变量
- 需要检查服务器中是否存在多个 jdk 环境,如果存在多个需要确认使用的 jdk 是否正确(特殊情况下可以在 agent.sh、agent.bat 中指定使用的 jdk)
- linux 服务器建议使用绝对路径启动插件端 如:sh /xxxx/xxxx/Agent.sh
- windows 服务器需要检查 Agent.bat 编码格式是否匹配,windows 环境中建议使用 GB2312 编码格式
注意修改相关配置或者环境变量后需要重启插件端
如果排查上诉相关问题,还是不能解决问题请继续看下述说明
判定依据 (jps 异常判定)
- 对应的项目(普通运行模式)运行状态是未运行
- 使用 jps 命令并未查询到插件端自身进程
# 排查 jps 缓存文件
jps 的工作原理
java程序在启动以后,会在java.io.tmpdir
指定的目录下,就是临时文件夹里,生成一个类似于hsperfdata_User的文件夹
,这个文件夹里有几个文件,名字就是java进程的pid,因此列出当前运行的java进程,只是把这个目录里的文件名列一下而已。 至于系统的参数什么,就可以解析这几个文件获得。
目录举例: (一般情况下默认文件路径)
- 在 Linux 中为
/tmp/hsperfdata_{userName}/
- 在 Windows 中为
C:\Users\用户\AppData\Local\Temp\hsperfdata_{userName}
如果对应目录中没有 java 进程编号的文件,就表示文件被异常删除了、或者权限不足相关引起的。
解决办法:
- 手动关闭对应的 java 进程重新启动查看是否存在对应的文件
- 检查对应的文件夹是否被修改过权限造成当前用户无法读取到对应目录
# Jps 执行响应很慢
Jpom 中在获取节点状态、进程列表都会使用到部分 jps 命令,如果您发现节点基本功能都正常,但节点监控异常或者无法查看进程列表。
插件端日志有大量 /status
超时信息
此时您可以在服务器中执行一下:jps -l
命令查看响应速度 :
- 如果响应慢但是返回个数不多这个很可能是 jdk 差异 目前已知
openJ9 jdk
可能出现这样的情况 - 如果响应出很多进程,并且实际上未运行这么多进程排查方法如下:
- 可能是因为平时关闭 java 进程均使用
kill -9 xxx
,这样方式可能产生僵尸进程 - jps 命令实际上是有文件缓存的,在 linux 服务器上目录为:
/tmp/hsperfdata_$USER
($USER是启动Java程序的用户)
- 可能是因为平时关闭 java 进程均使用
# 获取项目状态超时
如果在节点(插件端)控制台或者项目列表中出现一直没有显示项目状态,或者出现提示超时信息。 这种一般是获取项目状态超时,因为 jpom 针对 java 程序获取状态默认使用 jps 命令来处理,据了解可能在不同的 jdk 中 jps 命令存在一定差异,可能出现 jps 命令响应很慢(openJ9 )
解决办法有如下:
- 配置节点超时时间 + 配置前端请求超时时间(前端请求超时时间在服务端 extConfig 中配置)
- 跟换 jdk(建议使用 openjdk) 或者排查 是否出现异常进程
- 升级 jpom 版本,2.8.18+ 优化过批量获取项目状态相关逻辑,会缩短整个接口耗时