深入理解JVM(五)JVM优化策略

 5.2一些案例:

1.高性能硬件部署策略:

(1)背景:某公司升级了硬件(CPU升级为4核,内存增加为16G),发现不定期出现网页失去响应。

(2)原因:①内存增加之后,项目中有在内存中处理文件的大对象,从而进入的老年代而没有进行及时回收,然后每次Full GC都要回收比较大量的对象;②Full GC的“Stop-The-World”;

(3)处理方法:

  ①使用64位jdk,减少Full GC的次数,可以定时在深夜进行Full GC或者重启服务器,缺点:内存回收时间停顿很长,64位JDK比32位的性能低,转储堆内存快照过大不利于分析,更占内存(指针膨胀、对齐补充);

  ②使用32位jdk,在服务器上搭建多个Web集群,使用反向代理进行负载均衡,缺点:对全局资源的争抢(比如磁盘,容易IO异常),内存受32位影响一个虚拟机最多只能分配2GB,每个虚拟机的缓存对内存的浪费(可以集中式缓存);

2.堆外内存导致的内存溢出:

(1)Direct Memory:直接内存区的溢出,比如NIO要使用这个区域的内存;

(2)栈:栈的内存不足会导致无法分配线程;

(3)Socket缓存:每个Socket连接都会占内存,连接太多就会出现内存不足;

(4)JNI(Java Native Inteface):本地方法占用的堆外内存;

(5)虚拟机本身和GC:虚拟机本身也占用内存;

3.外部命令占用资源过多;

4.JVM进程崩溃:

  (1)过多请求异步调用接口,请求积累过多而导致了虚拟机无法承受而崩溃;

  (2)使用生产者/消费者的消息队列模式解决;

5.不恰当数据结构导致的内存占用过大:

  数据本身所占大小与总大小比值太低,存储效率低,也就导致了GC的效率低

posted on 2018-12-21 17:25  lyjlyjlyj  阅读(131)  评论(0编辑  收藏  举报

导航