Wednesday, April 30 2003 3:17 PM 也许你已经用 Java 写过很棒的应用程序或者网站,但是它们看上去运行得非常得慢。不要理会一些 开发 者告诉你的成见,Java的运行速度并不是你想象的那么" name="description" />
MILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">Wednesday, April 30 2003 3:17 PM
也许你已经用Java写过很棒的应用程序或者网站,但是它们看上去运行得非常得慢。不要理会一些开发者告诉你的成见,Java的运行速度并不是你想象的那么慢。你所需要的只是弄清楚怎样加速你的程序的运行。然而,优化的最大问题不是优化那些低速的代码,而是找到这些代码!而这就是JProbe Profiler能够帮助我们的地方。
JProbe Profiler是由Sitraka开发的一个Java程序。通过运行和监控应用程序字节码,它可以帮助程序员找到他们开发的代码中的瓶颈处。这个要价$649的程序也许不是Java开发者工具库中最便宜的工具,但它可能是最不可缺少的一个。
Sitraka JProbe Profiler
$649 以上
特长:
可选的文本界面安装
实时或者离线的数据显示
强大的用户接口
数据导出功能
缺点:
繁琐的注册系统
实时远程数据显示需要共享网络磁盘
在一个快照生成后不能完整的消除其中的一个方法
虽然在桌面应用上Java正在缓慢积累份额,但是人们仍然发现它最大的用处在服务器端软件上。Sitraka在编写JProbe的时候注意到了这一点。JProbe的安装人员有两种选择,一种是带有图形界面的,一种是不带图形界面的。后者在我们需要通过终端访问一个运行在远程的应用程序服务器时尤其有用。我发现这会是一个很好的尝试。
要运行JProbe首先要创建后缀为.jp1文件,它是快照捕获设置文件,用来指定我们要研究的类和方法,这些类和方法在执行时会被计时而且细查。而.jpl文件只能被内嵌在JProbe控制台的图形wizard创建。我发现这个限制着实令人讨厌,尤其是当我只能通过文本模式管理远程系统的时候。我找到的唯一解决办法就是用一个本地的图形界面生成配置文件然后把它传输到远程服务器上面。
JProbe可以和许多常用的应用程序服务器例如IBM公司的Web Sphere、JBoss、Tomcat和Resin集成。注意,JProbe缺少对Mort Bay的Jetty HTTP Servlet Container(它是JBoss缺省的servlet container)的集成支持。在它优异的能力中缺少的这一项功能也许会对你的购买计划产生负面的影响。
在一个构造好的程序执行过程中,JProbe的分析引擎仔细的记录下消耗的时间和每个方法生产的对象的数量。JProbe的数据可以被实时地查看,也可以延后在一个图形控制台里面看保存好地快照文件。这些快照文件在应用程序或者服务器被关闭退出时自动创建,而且通过.jpl文件可以指定这些文件的创建频度。
JProbe图形控制台将分析引擎收集地丰富数据转换成用户可以理解的一种格式。在这方面它做得很成功。用户接口尤其强大。对每个快照而言,在主窗口都有分析引擎收集到地数据地两种不同而且相辅相成的视图。图A展示了一个执行快照的运行画面。
上图中地上半部分包含了方法调用图,该图通过直观地颜色代码展示每个方法调用的相对执行时间。在图中,encodeAsPng的亮红色说明在这个特定的执行过程中其消耗地时间比javascript:;" onClick="javascript:tagshow(event, '%C6%E4%CB%FB');" target="_self">其他方法多得多。将鼠标悬浮在上面可以看到它在总的方法执行时间中所占的比例。在上例中,encodeAsPng消耗了整个执行时间的74.4%,因此我们可以知道encodeAsPng可以作为被优化的候选代码。
上图中的下半部分视图以表格的形式显示了和方法调用图中相同的时间信息。这下半部分的数据可以以多种方式存储,甚至可以将它导出成可以比较的电子表格的形式为更进一步的外部分析做准备。除了方法运行时间,这两个视图还可以用来显示对象实例数(我们可以根据它来研究非常低效率的代码),可以帮助确定造成过度的垃圾收集延迟的间接原因。
仍有待改进之处
虽然功能强大,但是快照显示仍然有一些地方值得改进。最显著的问题是,在一个快照被创建之后,没有办法在时间份额图中消除一个方法的影响。例如说,如果一个程序把99%的时间花在了用Socket.aclearcase/" target="_blank" >ccept方法等待新的TCP连接上时,开发者可以从视图中去掉这个方法,但是JProbe不会重新计算其他方法所占用的时间份额。这样,开发者只剩下大约0.05%到0.5%的大小来比较其他方法之间的时间份额。虽然通常说来,总是可以通过配置.jpl设置文件或者不计算方法执行时间等方式排除一个方法,但是这都需要重新运行程序来生成一个新的快照。JProbe应该提供一个更简便的方法供选择。
JProbe的一个非常优秀的特性在于,当远程服务器上面正在运行分析引擎监控代码时,用户可以在本地计算机上运行其图形控制台。唯一的缺点是这个实时的显示不只需要一个到远程机器上的TCP连接,而且还需要由NFS或者SMB提供的共享网络磁盘空间。这个不太合情理的要求使得原本完美的这个特性有了一点点瑕疵,同时也暗示了这样的解决方法并不像是最初的设计目标,而更像是是一个事后的补救措施。
如果你的耐心有限,或者你的公司的网络安全规定不允许你在两台机器之间设置共享磁盘,你仍可以从服务器下载分析快照文件到本地计算机上,然后通过JProbe的图形控制台浏览结果。
许可证系统着实讨厌
不管怎样,在你能运行JProbe并享受它所有的优良特性之前,你必须和它令人讨厌的注册系统打交道。获得许可证的过程包括共享一些计算机认证的信息给Sitraka、公司用email寄给你许可证文件的过程。
通过在Sitraka的网站填写文卷可以免费获得一个十天的使用许可证。永久的许可证根据不同的功能限制有不同的价格,同时,也包括了收集你主机的不同数量的信息过程。最便宜的价格是$649,这是一个单用户、单主机的永久许可证的价格。而一个多用户、多主机、连接一个相关的许可证服务器的版本价格是最高的。
总的来说,我觉得JProbe会成为一个包含某些强大特性的优秀的性能分析工具。虽然它有一点点令人讨厌的怪癖,而且价格偏高,但仍是一个值得考虑的有用工具。