大神们帮忙看看Java通信机运行所耗内存,提提优化建议!!谢谢了!

小痴 发布于 2013/11/14 14:47
阅读 502
收藏 0

    程序为高清卡口摄像机车牌识别服务,为Server端。

    目前有将近80台高清卡口摄像机通过3G路由器连接本服务。

    每张图片大概3,4百KB,每天接收图片数据量大概十几个GB。

    还需要做计算空车位的处理,还有每分钟一次的心跳检测。

    通过JNA调用DLL监听数据接收,上次重启服务时间10月30日。

    以下为当前11月14日14点38分(非早晚高峰期)占用CPU和内存使用情况

    大神们,帮我看看这些情况怎么样,给我提提优化的建议。

    系统是 windows server 2008

    数据库为 sql server 2005

    连接池为 proxool

    我感觉占用内存有点高,而且是每日递增,线程数也有点多。


permGen

eden space

survivor space

perm gen


加载中
0
你是错的我恒对
你是错的我恒对

在java目录bin下 有jconslole 跟visualvm 后者装下插件

可以查看堆分配情况,我没实践过,可以生成堆快照,要不生成一个,我学习下吧 ^ ^

你是错的我恒对
你是错的我恒对
回复 @小痴 : 嗯嗯,谢谢,学习了
你是错的我恒对
你是错的我恒对
回复 @小痴 : 不再的,我没怎么用过,没有的,只有堆的
小痴
小痴
回复 @edit : 已经修改帖子了。。。手动执行GC回收没反应。。
你是错的我恒对
你是错的我恒对
不好意思哈
你是错的我恒对
你是错的我恒对
回复 @edit : 我理解错了 = =| 不要给我了 浪费你时间了 是我理解错了 permgen 我以为 permgen是老年代的
下一页
0
小痴
小痴
有好心大神来看看吗?
0
你是错的我恒对
你是错的我恒对
描述的程序不清楚,相帮也没法帮啊,图片分析用的java吗?nio 还是啥?还是java从dll里面拿到结果,不跟图片打交道?
你是错的我恒对
你是错的我恒对
回复 @小痴 : 360优化不要用,他会关掉服务的
小痴
小痴
图片是直接从DLL中拿到字节数组然后存入本地硬盘,我确实不太会表达,就是感觉内存占用的太高,设置的年轻态都用光了估计程序就挂掉了,还有用360清理内存后程序也会挂掉,报致命错误。
0
MaxWU
MaxWU
GC参数用的是什么? 要不把JVM的参数贴出来大家一起看下?
你是错的我恒对
你是错的我恒对
回复 @小痴 : PermSize=512M设大了 ,发个 jconsole 新生代 老年代图吧 看看 minor gc 跟 full gc 时间 真心 可以优化的啊 亲
小痴
小痴
我的年轻态是这样设置的。 java -Xms1024m -Xmx1024m -XX:PermSize=512M -cp ..... 16GB的内存我不明白为什么只能设置这些,设置大了程序就会报错。
0
你是错的我恒对
你是错的我恒对

jconsole里面有  新生代 老年代 的图,我看到你堆内存每次回收后都很小,也就是说 老年代可能使用很少 大部分都是 一次mini gc 就全回收了  你那样参数 还能优化的 ,发个 新生代 老年代图吧   我再看遍书 等我下好吧

你是错的我恒对
你是错的我恒对
回复 @小痴 : tenured gen 的图哈 ,明天 给回复把, 我今天 好好仔细看下的哈 好不,不用等我了就= =|
小痴
小痴
等吃完饭再搞吧!辛苦了!
小痴
小痴
原来是这个原因啊,我说怎么虚拟机只能识别4G呢。。。
小痴
小痴
回复 @edit : 系统64的 JDK 32的
你是错的我恒对
你是错的我恒对
32 还是64系统啊 还有jdk 32位还是 64位的额
下一页
0
南湖船老大
南湖船老大
p roxool 不是最渣的连接池么?
你是错的我恒对
你是错的我恒对
回复 @小痴 : 太不好意思,我有点事处理
小痴
小痴
回复 @edit : 又贴了三张图!
小痴
小痴
回复 @edit : 好,刚到公司,稍等!
你是错的我恒对
你是错的我恒对
回复 @小痴 : tenured gen 的图哈
小痴
小痴
额。。。本来用的是DBCP,后来在本地可以,到服务器上获取不到数据源,就换了。。。。
0
你是错的我恒对
你是错的我恒对


首先permgen 设置大了  128m就行 ,然后 基本 老年代 是没有东西的 占用小而且 full gc基本没发生看图觉得 , 所以 可以调下 老年代跟 新生代比率 ,让新生代 大点,这样minor gc就少了, 再看新生代 基本 都是 满了触发的 minor gc, 加大点 新生代 内存 可以 减少 minor gc次数,而且 大部分 全是临时对象, minor gc一下就没了, 基本没有 存活到 老年代的

上面 是我 看到图 想说的 , 新生代 老年代 比率还是 不调好 默认 1:2,可以试试1:1的其实,然后32位 jdk,可以识别3g多,堆感觉2g就好,然后多核的话新生代用个并行收集器 pernew gc

-Xms2048m -Xmx2048m -XX:PermSize=128M -XX:+UseParNewGC 

设置更大新生代比率 下面就是

-XX:NewRatio=1


这些调优 可以减少 gc时间,最大限度利用硬件资源吧,其他感觉没啥作用了

小痴
小痴
回复 @edit : 刚改完代码,才放上去,设置 xms2048 xmx2048 就报错了 貌似错误的意思是没有足够的内存空间,只能改成两个都是1024的就可以了,先跑一天,明天晚上给你发堆内存图。
你是错的我恒对
你是错的我恒对
回复 @小痴 : 现在 jvm多久 minor gc一次啊,有没有卡顿现象,能 在发个 截图不
小痴
小痴
我得好好学学你说的这些。。。
返回顶部
顶部