在开发环境写好并测试过的服务程序,部署到服务器去,结果未必理想,一是数据源可能必须在服务器上获取,二是可能会出现开发机没见过的问题,所以有必要知道一些远程调试和分析的方法;最近查阅了一些资料,现在就把过程记录一下。
一、 在eclipse中远程调试
1.1 在你的 JAVA启动命令后加入-server -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address={$port} 其中port是你需要的端口,起动服务
1.2 在eclipse中配置debug:
打开debug设置,找到Remote Java Application,新建一个,关联上那个服务的本地代码,填写远程地址端口,connection type选attach,点击debug
启动到debug视图就能看到了,在代码上点断点就能单步了。
想看图文并茂的可以点击这里http://blog.csdn.net/sunyujia/article/details/2614614, idea等IDE应该类似
二、用visualvm 远程监控JVM
如上述1.1的方法, JAVA启动命令后加入 -Djava.rmi.server.hostname={$host} -Dcom.sun.management.jmxremote.port={$port} -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 自定义Host和port,如果不写host可能会绑不对IP。
启动$JAVA_HOME\bin下的jvisualvm.exe命令(据说windows上有NTFS的问题,需要在快捷启动方式 "目标" 后加上一句" -XX:+PerfBypassFileSystemCheck"),添加远程机器,(本地进程可以直接看),添加远程机器的端口就能看到JVM情况了。
图文并茂版本在这:http://wenku.baidu.com/view/b9f4491ea76e58fafab00309.html
三、用jprofiler 远程监控JVM
visualvm 那个监控功能没那么全,如果想得到更好看更细致一些监控可以用jprofiler,这需要在服务端也安装这个(不知道是否是必须),下面以jprofiler7为例。
3.1 下载jprofiler的linux版本,在服务端找个地方解压
3.2 windows安装好以后(网上很容易找到jprofiler7的注册码,但是相同注册码的局域网只能同时存在一个),start center -> new remote integration - > 一路下来选择远程机器类型 , 设置JVM,选start up immediately ... ,填写远程地址,填写jprofiler在linux上的路径,端口,(这么多步骤就是为了帮你生成一句话) ,例如:-agentpath:/data/jprofiler7/bin/linux-x64/libjprofilerti.so=port=8849,nowait ,这句话加入你的JAVA程序启动时候的参数。
好了,启动远程服务,本地启动监控就能关联上JVM情况了。想看细致的可以点这里:http://wenku.baidu.com/view/b5fbf26ca98271fe910ef9f3.html
其实配置起来确实不难,用好远程控制能让我们开发效率提高,tomcat等应用服务容器应该也是一样的。