UDN-企业互联网技术人气社区

板块导航

浏览  : 23470
回复  : 61

[技术分享] UAPStudio跑得慢的原因

  [复制链接]
chenw的头像 楼主
发表于 2014-3-4 11:16:22 | 显示全部楼层 |阅读模式
    UAPStudio体量较大,大概能吃掉几百兆的内存,如果你的机器配置不高,跑得慢很正常。如果你在配置不高的机器上启虚拟机VMWare来跑UAPStudio,你嫌慢?拜托,能跑起来就不错了。
    如果同样配置的机器,别人跑studio很顺畅,而你的studio在龟行,就要好好找原因了。
    就我个人的经验,一般这有两个可能:
    1. JVM内存参数设置不当
    2. UAPStudio中运行的不必要模块太多
    关于第一个问题,对于4G内存机器,我的建议是“-Xms256m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=512m”,具体含义我偷个懒,引用一下别人的帖子
   
1. Heap设定与垃圾回收
Java 内存分为3个区,Young,Old和Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。
通常把前两个区域叫做堆区(Heap),Permanent区则负责保存反射对象,Class的meta信息等.
堆区发生内存溢出的异常为:java.lang.OutOfMemoryError: Java heap space,
Permanent区发生内存溢出是为:OutOfMemoryError: PermGen space.
JVM的Heap分配可以使用-X参数设定,


-Xms       
初始Heap大小

-Xmx       
java heap最大值

-Xmn       
young generation的heap大小


JVM有2个GC线程。第一个线程负责回收Heap的Young区。第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区。Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。
为什么一些程序频繁发生GC?有如下原因:
l         程序内调用了System.gc()或Runtime.gc()。
l         一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。
l         Java的Heap太小,一般默认的Heap值都很小。
l         频繁实例化对象,Release对象。此时尽量保存并重用对象,例如使用StringBuffer()和String()。
如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态。许多Server端的Java程序每次GC后最好能有65%的剩余空间。
经验之谈:
1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3[2]。
2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成[2]。

注意:
1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
2.Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。
2.Stack的设定
每个线程都有他自己的Stack。


-Xss       
每个线程的Stack

Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。

3,Permanent区
程序发布时候可能遇到的OutOfMemoryError: PermGen space,Class在被加载的时就会被放到PermGen space中,
它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对
PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误,
这种错误常见在web服务器对JSP进行pre compile的时候。
通过 -XX:PermSize=64M -XX:MaxPermSize=128m调整.
4.硬件环境
硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。
如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用[2]。




原文链接:http://blog.csdn.net/kkdelta/article/details/4000717
   关于第二个问题,我们在运行UAPStudio进行调试时(即在UAPStudio中启动中间件后),中间件会加载多个模块的类。而模块的选择在“UAPStudio窗口菜单-首选项-UAPStudio集成开发环境-开发配置”中的“模块选择”页签中进行。如下图

   关于模块选择的问题,我建议除了你现在在开发的模块及其依赖模块外,还需要选择的模块如下:
RIA开发:所有UAP模块+ncaam(应用资产管理)+pubapp(单据开发框架)
报表开发:所有UAP模块+ufofr+ba开头模块
WEB开发:uap+uapbd+web开头模块

图像 14.png
发表于 2014-8-7 07:43:02 | 显示全部楼层
我脚得还有一个更关键的原因:开发的时候没事起着一大堆乱七八糟的应用:qq,360,杀毒软件,没必要的一些服务,每次我看到这些个情况,就忍不住说一声这是程序员的耻辱,再有,开发机少说得8g内存吧,要不,os一直在喊我饿我饿,你又不理人家,逼不得已,人家只有吃硬盘,还得来来回回地吐,能不慢嘛!

使用道具 举报

回复

chenw的头像 楼主
发表于 2014-3-4 11:17:34 | 显示全部楼层
有人说Xmx设置为1024更合理。大家可以试试
使用道具 举报

回复

发表于 2014-4-4 19:19:07 | 显示全部楼层
去掉启动.bat中的refresh启动会更快
点评 ( 1 ) 收起 / 展开点评

super_emon 2014年04月13日 17:32

说错啦,去掉 .clean。会快一些。

使用道具 举报

回复

发表于 2014-4-11 10:01:57 | 显示全部楼层
super_emon 发表于 2014-4-4 19:19
去掉启动.bat中的refresh启动会更快

这个refresh是做什么的?
使用道具 举报

回复

chenw的头像 楼主
发表于 2014-4-11 11:19:16 | 显示全部楼层
哪个.bat下有refresh呀?startup.bat吗?为什么我这里没有?
点评 ( 1 ) 收起 / 展开点评

super_emon 2014年04月13日 17:31

.clean . - -说错啦,抱歉

使用道具 举报

回复

发表于 2014-4-11 21:46:27 | 显示全部楼层
本帖最后由 sunsx 于 2014-4-11 21:47 编辑

內倆擠眉弄眼兒吐舌頭的是什麽啊,怎麼這么好的貼子還帶作料啊。

使用道具 举报

回复

chenw的头像 楼主
发表于 2014-4-13 11:38:52 | 显示全部楼层
应该是英文的“:P”

使用道具 举报

回复

发表于 2014-4-14 19:29:39 | 显示全部楼层
这个不错
使用道具 举报

回复

发表于 2014-4-19 18:02:31 | 显示全部楼层
好东西 谢谢 !!!!
使用道具 举报

回复

发表于 2014-8-6 23:31:43 | 显示全部楼层
好东西,不错
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部