visualvm是jdk里自带的一款比较实用的可视化profiling工具。

想法1:远程连接通过ssh隧道穿透隔离网络访问生产环境

java有处理ssh协议的第三方包,ssh隧道只要对端安装有opensshserver都能搞定。
所以,只需要开发一个visualvm的新远程连接插件,即可穿透隔离网络在visualvm的可视化界面下,profling生产环境主机。

当然,安全性和权限需要同时考虑。

想法2:使远程和本地提供的特性一致

visualvm可以用来分析cup,thread,heap,采样cpu和内存,heapdump等。
但绝大多数功能仅限于本地。
虽然visualvm也提供了远程访问的功能,但其功能大幅缩水。官方提供的特性列表如下:

FeatureJDK1.4.2
local/remote
JDK5
local/remote
JDK6
local
JDK6
remote
Overview关于增强visualvm的一些想法_java关于增强visualvm的一些想法_java关于增强visualvm的一些想法_java关于增强visualvm的一些想法_java
SystemProperties(inOverview)关于增强visualvm的一些想法_java
Monitor关于增强visualvm的一些想法_java关于增强visualvm的一些想法_java关于增强visualvm的一些想法_java关于增强visualvm的一些想法_java
Threads关于增强visualvm的一些想法_java关于增强visualvm的一些想法_java关于增强visualvm的一些想法_java
Profiler关于增强visualvm的一些想法_java
ThreadDump关于增强visualvm的一些想法_java
HeapDump关于增强visualvm的一些想法_java
EnableHeapDumponOOME关于增强visualvm的一些想法_java
MBeanBrowser(plugin)关于增强visualvm的一些想法_java关于增强visualvm的一些想法_java关于增强visualvm的一些想法_java
WrapperforJConsoleplugins(plugin)关于增强visualvm的一些想法_java关于增强visualvm的一些想法_java关于增强visualvm的一些想法_java

幸好visualvm是开源的,为了实现想法2的功能,我们只需要改进一下visualvm的实现,引入一个特殊的远程agent(替换jstatd)。
该agent用于访问本机java进程。这样,visualvm的远程访问镜像到本地,同时也具备本地的所有功能。

如果想法1和想法2都能实现,我觉得visualvm的使用范围会更广。
后面我计划研究一下!