作者:小强
MSN:blood1949@msn.com
本人为作者原创,若转贴,请保留作者署名,谢谢!
1. 必须限制口令文件读取访问 错误.
A. 错误描述: 在配置好JVM启动参数后, 启动RESIN, 过程中发生错误,无法正常启动.
1)错误信息如下:
错误: 必须限制口令文件读取访问: E:\Program Files\Java\jdk1.5.0_15\jre\lib\manage
ent\jmxremote.password
2) 在resin.conf 中的JMX配置信息如下:
<jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.port=1090</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.access.file=E:\Program Files\Java\jdk1.5.0_15\jre\lib\management\jmxremote.access</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.authenticate=true</jvm-arg>
这里没有添加[com.sun.management.jmxremote.password.file=pwFilePath] 参数,因为
pwFilePath系统默认的是JAVA_HOME/jre/lib/management/jmxremote.password , 这个例子中密码文件正是默认的文件.
3)运行环境.
app_server: resin3.1.5
op : windows xp
jdk : jdk1.5.0.15
apache : apache 2.2.8
B.错误原因分析:
由于密码文件所属用户权限没有进行设置,应该设置为只有owner才可读,当然这个用户也必须是启动应用服务器(RESIN, 或其他)的用户。
C.错误解决办法:
设置文件读改权限所属用户, 就是文件的拥有者. 在WINDOWS操作系统中,需要文件所在的硬盘分区是NTFS,才能进行安全设置,分配读取用户.
修改提示信息:
“安全”选项卡是NTFS分区上特有的,Windows通过“安全”选项卡中设定的ACL(访问控制列表)来进行详细的文件访问权限控制。对于Windows XP系统,为了适应家庭用户娱乐的需要,Microsoft推出了一种新的文件共享方式,即“简单文件共享”(参见http://navicy.cnblogs.com/archive/2005/10/17/256765.html)。对于开启了“简单文件共享”的机器,其文件或文件夹的“属性”窗口中是没有“安全”选项卡的,而Windows XP安装好后默认“简单文件共享”功能是开启的。
要关闭“简单文件共享”功能,可使用以下方法:打开“控制面板”—“文件夹选项”,找到“查看”选项卡,在下面取消选择“使用简单文件共享(推荐)”后即可开启“安全”选项功能。 )
D.验证是否成功
1)输入错误的用户名和密码,如果成功出现以下提示,证明你已经成功设置好JCONSLE的安全登陆属性.
2)输入正确的用户名密码,可以正确连接Jconsole .
-----------------------------------------------------------------------------------------------------
2. JCONSOLE无法连接远程服务器
A. 错误描述: 用Jconsole 连接远程服务器时, IP地址和port都输入正确的情况下,仍然是连接失败.
1) 在服务器端用tcpflow 截获网络传输包,内容如下:
<jvm-arg>-Dcom.sun.management.jmxremote</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.port=9889</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.authenticate=false</jvm-arg>
<jvm-arg>-Dcom.sun.management.jmxremote.ssl=false</jvm-arg>
3)运行环境:
op_system: Linux version 2.6.9-5
JDK: jdk1.5.0.15
app_server : apache 2.2.8 , resin3.1.5
B.错误原因分析:
通过tcpflow 截获网络数据包,查找原因,由于内容是二进制,不能正常查看错误信息, 但内容中包含了127.0.0.1的信息, 在网上搜了一下找到了一篇有关文章谈到这个问题,是服务器端解释机器名的问题,如果服务器端hostname -i被定向到127.0.0.1则会出现连接失败的问题。
JCONSOLE连接上监控的进程,从监控进程下载了RMI远程调用的RemoteStub,访问服务器的进程,服务器端的地址可能是通过hostname -i 命令或者读取/etc/hosts 文件来获得的.
这篇文章链接如下:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6209663
C.错误解决办法:
修改/etc/hosts文件,使hostname -i 指向正确的IP.
[root@localhost tmp] # vi /etc/hosts
把文件内容修改为:
# Do not remove the following line, or various programs
# that require network functionality will fail.
#127.0.0.1 localhost localhost.localdomain localhost
202.33.86.27(服务器真实IP) localhost localhost.localdomain localhost
注意:修改后,必须重启应用服务器才能生效!
D.验证是否成功