本人就一屌丝coder,懒得总结,工作了两年感觉经常要重复的做一些无谓的事情,就linux的命令而言,某一时间如何要经常部署,命令会记得比较熟,但是过一段时间没用又忘记,如果没有做笔记,某些项目没保存,则又要重google一次某些命令,自我感觉工作效率很低,so某些笔记是必须的!
本来看好JavaEye论坛的,可是那个博客的编辑器太烂了,刚才想记录一下,发觉修改都蛋疼,好差鸡,所以还是转到CSDN旗下吧....
这是人生第一次写博客啊,可怜的娃,其实生活工作中好多好多类似偶这等懒人的coder,身边认识的就不少....
言归正传...
由于公司系统所属后台短信推送平台,基于socket的SMGP接口,在此前也做一些相关的后台工作,基本模块完成后,于是便在测试的过程中想连接到测试服务器上面看看当前系统运行的情况,由于工作机器是windows,在其下面的%Java_home%/bin下面有图形化实时监控的Jconsole与JVisualVM等监控软件,此等对于我们coder能清楚的了解自己当开发系统下面的内存、cpu、线程等详细情况。 这些软件能直接监控本机的JVM实例,或者因为同一个Java虚拟机的缘故可直接监控、然而当系统搭建在linux而非自己的开发机上时,可以使用自带的jmap等查看当前对象的内存,包括什么老年区、年轻区等,详细命令使用jmap --help啦...(具体好多其它命令详细的可以到%java_home%/bin目录下看看,看到不熟悉的可执行程序,可以google一它嘛,或者看看这位仁兄的文章http://blog.csdn.net/kelly859/article/details/5827365)
刚才所说的Jconsole与JVisualVM都是基于Java Management Extensions (JMX)的实时图形化监测工具,而要在远程的机器上启用JMX功能,则需要
第一步:
【java ${java_opt} className】 ,当中的${java_opt}则为一些java常用命,这里必须包括以下5条:
1、-Dcom.sun.management.jmxremote.port=12345(port啦)
2、-Djava.rmi.server.hostname=132.96.63.41 (服务器的IP啦)
3、-Dcom.sun.management.jmxremote (这个必须有,有很多帖也介绍jvm监控,可是缺少这个命令,固然不行)
4、-Dcom.sun.management.jmxremote.ssl=false (是否通过ssl加密码、默认配置false,不需改动)
5、-Dcom.sun.management.jmxremote.authenticate=false(是否需要认证什么的,默也是false,不需改动) 给出一个完整的shell例子:
paste一下自己的shell当作笔记也供大家参考:
start.sh
------------------------------------------- perfect seperate line -------------------------------------------------------
#!/bin/bash
className=cn.jasic.Server
classpath=.
#远程JVM监控
remote_opt="-Dcom.sun.management.jmxremote.port=12345 -Djava.rmi.server.hostname=132.96.63.41 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -server"
#内存设置
mem="-Xms128m -Xmx1024m"
#日志文件名称
logFile=../log/`date +%Y%m%d`
#用于启动SMGP接口模块的类路径
for file in `ls -1 ../lib | grep ".jar"`
{
classpath=${classpath}:../lib/${file}
}
#echo ${PWD##*/}
#echo remote_opt: ${remote_opt}
#echo className: ${className}
#echo classpath: ${classpath}
#echo logFile: ${logFile}
#echo mem: ${mem}
#清除日志
rm -f ../log/*
#查看日志
cd ../log
#运行后台程序
#nohup java ${remote_opt} ${mem} -cp ${classpath} ${className} 2>&1>${logFile} &
#tail -F ${logFile}
java ${remote_opt} ${mem} -cp ${classpath} ${className}
------------------------------- perfect seperate line -----------------------------------------
------------------------------- perfect seperate line -----------------------------------------
添加远程登录的用户名与密码方式
1、到C:\Program Files\Java\jdk1.6.0_43\jre\lib\management下复制:
jmxremote.access与jmxremote.password.template,把jmxremote.password.template改名成jmxremote.password(同样可以不用改名的);
2、编辑jmxremote.password内容如下:(用户 密码)
jasic1 jasic1
jasic2 jasic2
3、编辑jmxremote.access内容如下:(控制权限)
jasic1 readonly
jasic2 readwrite \
create javax.management.monitor.*,javax.management.timer.* \
unregister
具体的配置内容及说明可以看jmxremote.access与jmxremote.password.template的注释。
4、把jmxremote.password与jmxremote.access文件同时copy到linux服务上的当前用户目录jmx文件夹下面;
具体路径分别为:
~/jmx/jmxremote.password
~/jmx/jmxremote.access
同时使用chmod -R 400 ~/jmx/* 根据权限为只读(否则如果非只读会在启动时报错)
5、然后在jvm启动时添加如下参数
-Dcom.sun.management.jmxremote.port=12345 -Djava.rmi.server.hostname=192.168.1.100 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=~/jmx/jmx.password-Dcom.sun.management.jmxremote.access.file=~/jmx/jmx.access
标注红色:根据自己设置而配置
标注黄色:使用《用户名:密码》方式的远程连接与无《用户名:密码》方式的远程连接的差异。
------------------------------- perfect seperate line -----------------------------------------
最后使用本地jvisaulvm工具连接:如下
第二步:
1、打开运行输入:Jvisualvm,回车,或直接到%java_home%/bin下双击Jvisualvm.exe,启动后,添加JMX
2、连接中选择,并输入上訹${java_opt}中的port,最后成功画面