收藏到: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网 QQ书签 更多 Bookmark and Share
显示标签为“性能”的博文。显示所有博文
显示标签为“性能”的博文。显示所有博文

2009年4月29日星期三

性能监控 以及 开发自动化 -- Java

前一阵在找性能监控的工具,自己对Java比较关注点,因此在java上找到一些工具,比较著名的就是JProfiler,在Java1.5以后,在JDK中也带有一些性能监控的工具,如jconsole等,还有一些开源的产品,但是JProfiler分析的程度比较深,因此使用的效果相对好点。
(十个最好的Java性能故障排除工具 : http://www.kuqin.com/developtool/20080721/11869.html

在进行性能监控工具的查找中,发现问题的根源很多时候还是出在开发上面,在开发时对性能不重视,以为Java有内存自动回收(gc)就万无一失了,对Java的内存分配方式、回收方式都不去了解它,造成开发出来的程序问题一大堆。

网上看到IBM有一个开发自动化的专题(以前看到过,但是没有这次这么有感触),要仔细的揣摩一下

  • CheckStyle 报告与项目预定的编码标准的偏离度。
  • CPD 报告代码重复。
  • JavaNCSS 可以帮助团队专注于更高级的代码复杂性领域。



2009年4月27日星期一

Tomcat遇到了“java.lang.OutOfMemoryError: PermGen space”

Tomcat中新增了一些功能后,原来正常的程序,在运行一段后,发生了一下错误:
Exception in thread "TP-Processor171" java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: PermGen space

PermGen内存溢出。根据网上查了一下资料,发现这是sun JDK分代管理的一个问题 --- 当然,程序使用上也有讲究,但是程序上只能尽量避开这个问题,说解决的方式更换JDK,换成BEA JRokit。

Permanent Generation space,是指内存的永久保存区域,用于存放ClassMeta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放InstanceHeap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APPLOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。 如果你的WEB APP下都用了大量的第三方jar, 其大小 超过了jvm默认的大小(4M-- 这个值各个地方写的不一样,没有搞懂,要确切,到JDK提供的官方去查)那么就会产生此错误信息了。 


以下是网上的一些资料,
---------------------------------------------------
问题已经查明,这个和程序编写有关系。

当初不知道谁写的代码,当hibernate发生错误的时候,就重构一个hibernate的factory,每发生一次错误,就重构一次。这样每次重构的时候,都会造成PermGen的增长。把这个问题解决了,PermGen Size也没有溢出过。





性能调试、测试工具

性能对版本是否能给客户带来比较好的感受、是否能降低整个系统的投资,占据着相当重要的地位。

有一个版本即将发布,在讨论时,对于程序的性能提了一下,在这里顺便做一下总结,对公司目前的所有产品,都考虑做一下性能的测试,以提高产品的服务能力。

从公司开发的角度、测试的角度来看,大致需要以下一些调试、测试工具:

  1. Windows C++的
  2. Linux C++的
  3. Java的
  4. C#的
  5. 数据库的(Oracle & MySQL)
  6. Web性能的
    Web性能还包括安全方面的测试工具
  7. 操作系统的(以Linux为主)
  8. 网络方面的
估计就是上面一些(可能会有遗漏),对以上的每一项,都需要多一下单独的讨论--- 自己比较关心Java性能工具、Web性能工具、数据库性能工具以及操作系统的性能工具(这个应该每个人都会)

性能调试、测试工具,不仅需要了解机器的整体的性能,对于每个开发人员,必须要了解自己开发的程序的性能,单个进程的性能(目前还没有多进程程序)