java - 正常的应用多久一次Full GC?
问题描述
我查看我们服务器的状态,半个月发生了900+次full gc,大约20分钟一次full gc,这是正常的吗?或者说优化到多久一次会比较合理?
问题解答
回答1:虽然没有优化过。不过觉得这个需要按照实际的业务需求和业务能力去做支撑.才好优化。
回答2:看java应用的heap大小以及qps,不过初步看20分钟一次的full gc,貌似不大正常
回答3:jvm的优化谈起来可以讲几个小时,这里简单的给你点意见,不系统的展开说。
其一 :你的问题是full gc 频繁,看下总内存和老年代设置的是否太小了。主要是看参数 -Xmx , -Xmn. 若是太小的话,必然会gc频繁。
其二:添加以下参数 -verbose.gc -XX:+PrintGC -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+PrintTenuringDistribution -Xloggc:/data/log/xxx/xxx-gc.log -XX:+PrintGCDetails查看每次gc ,老年代还剩余多少空间,一般来说,老年代的空间设置为gc后内存的2-2.5倍是一个较为合理的数值。同时通过这个日志可以看到是否大量的对象没有在新生代充分的gc掉就进入老生代。原本可以通过新生代回收的对象进入老年代的话必然会full gc 频繁
其三 : 代码原因 dump 内存 jmap -dump:live,format=b,file=xx.bin [pid]然后通过MAT(http://www.eclipse.org/mat/)工具来看具体是哪块大内存没有被释放
相关文章:
1. $fields = $values = [];这条代码一直定义不了,一直报错,老师的源码也是被报错的,执行不了,请问该怎么解决这个问题2. python - 求一个在def中可以实现调用本def满足特定条件continue效果的方法(标题说不太清楚,请见题内描述)3. java - mybatis怎么实现在数据库中有就修改,没有就添加4. MYSQL新建用户设置可以远程访问的问题5. node.js - nodejs和前端JavaScript 字符串处理结果不一样是什么原因?6. angular.js - angularjs的自定义过滤器如何给文字加颜色?7. javascript - 用表单提交两个时间段请求后台返回对应数据时出现的一些问题!8. docker-compose中volumes的问题9. mysql - SQL操作时间的函数?10. docker api 开发的端口怎么获取?
![$fields = $values = [];这条代码一直定义不了,一直报错,老师的源码也是被报错的,执行不了,请问该怎么解决这个问题](http://www.haobala.com/attached/image/news/202205/093622cb60.png)