网上对于“使用Jprofiler监测WAS”的设置说明其实有很多。但是都漏了重要的一点,导致很容易在windows下WAS服务器启动失败,无法进行监测。
(下文中Jprofiler安装在C:/jp/中,读者可根据自己需要修改)
(所有问题均出现在windows中)
具体问题如下:
1.使用startServer启动服务器的时候出现错误
ADMU0116I: 正在文件
c:/IBM/WebSphere/AppServer/profiles/AppSrv02/logs/server1/startServer
.log
中记录工具信息
ADMU7701I: 由于 server1 注册成作为 Windows
服务运行,因此启动该服务器的请求将由启动关联的
Windows 服务完成。
ADMU0116I: 正在文件
c:/IBM/WebSphere/AppServer/profiles/AppSrv02/logs/server1/startServer
.log
中记录工具信息
ADMU0128I: 正在启动具有 AppSrv02 概要文件的工具
ADMU3100I: 正在从服务器读取配置:server1
ADMU3200I: 服务器已启动。等待初始化状态。
ADMU3011E:
服务器已启动,但是初始化失败。startServer.log、SystemOut.log(或者
zOS 中的作业日志)以及
c:/IBM/WebSphere/AppServer/profiles/AppSrv02/logs/server1
下的其他日志文件可能包含故障信息。
ADMU7704E: 在尝试启动与服务器相关联的 Windows
服务时失败:server1;
在执行
WASService.exe
时可能发生了错误:Starting Service:
dustballNode02
Service
failed to start.
startServer return code = -1
2.查看native_stderr.log文件提示如下错误
JVMJ9TI001E Agent library jprofilerti could not be opened (找不到指定的模块。 )
JVMJ9VM015W Initialization error for library j9jvmti23(-3): JVMJ9VM009E J9VMDllMain failed
无法创建 Java 虚拟机。
以上2个提示非常的误导人,让人以为是WAS的jvm的参数设置有问题。因此去查看该服务器的server.xml发现jvm参数确实被Jprofiler修改,如下:
genericJvmArguments="-agentlib:jprofilerti=port=8849 -Xbootclasspath/a:C:/jp/bin/agent.jar"
可以看出,jvm参数没有任何问题。
后来无意中发现,在myeclipse blue edition可以顺利启动WAS,并用Jprofiler来监测。具体操作如下:
先将上面的jvm参数从server.xml中除去;
然后在myeclipse blue edition里面配置was服务器,配置选项中有一个jvm参数,在那里加上上面的jvm参数
-agentlib:jprofilerti=port=8849 -Xbootclasspath/a:C:/jp/bin/agent.jar
还要在系统环境变量PATH中加入
C:/jp/bin/windows
这样在myeclipse中就可以启动WAS了。而且可以使用Jprofiler监测。
现在大家应该会觉得myeclipse非常的神奇了。通过仔细观察,myeclipse是采用非系统服务的方式启动WAS的。
而windows版的WAS在创建profile的时候可以选择是否注册成系统服务。如果一旦注册成系统服务,startServer命令就会调用系统服务来启动WAS,从而失败。(至于为什么失败,还不清楚具体的原因)
总之,在用Jprofiler时,想要成功启动was有3个方法:
1. 创建profile的时候不选择注册成系统服务;
2. 如果现有的profile已经注册成为系统服务了,在使用Jprofiler之前,先禁用该系统服务;
3. 使用myeclipse配置启动was。
这样一个简单的问题,折腾了俺2天,希望对其他的新手有所帮助。