深入理解JVM系列——JVM调优以及常用参数

JVM 调优

资源消耗主要存在于CPU、文件IO、网络IO、以及内存方面。

  • IO

    • 文件IO

      Lunix在操作文件时,将数据放入文件缓存区。当物理空闲内存够用时,通常只有在Lunix写文件和第一次读取文件的时候才会产生文件IO。

      在Lunix中,可以通过 pidstat 来追踪线程的文件IO的消耗;而 iostat 命令可以查看各个设备的IO历史情况。

      Linux IO实时监控iostat命令详解

      在查看消耗的时候,首先要关注CPU中的 iowait 所占的百分比,当 iowait 占据了主要的百分比时,说明文件IO消耗过高。通常来讲我们要找到对应的代码,通过 pidstat 来找到文件操作线程过多的线程,再结合 jstack 来找到对应的Java代码。

      造成Java文件IO严重的主要原因是多个线程需要大量内容写入(频繁的日志写入)的动作;或者磁盘设备本身的处理速度慢;或文件系统慢;或操作的文件本身已经很大。

      解决办法:

      从程序角度来说,造成文件IO消耗严重的原因是多个线程在写大量的数据到同一文件中,导致文件很快变得很大,从而写入变慢,并造成各线程间争抢文件锁。调优方式如下:

      1. 异步写文件,将写文件的同步动作改为异步动作,避免应用由于写文件慢而性能下降太多
      2. 批量读写,频繁的读写会对IO消耗严重
      3. 限流,将文件IO消耗控制到一个能够接受的范围
      4. 限制文件大小,在超出最大值后生成一个新的文件
    • 网络IO

      Lunix中可以采用 sar 来分析网络IO的消耗情况。对于Java应用而言,主要使用的是 tcpsck 和 updsck 这两个信息。由于没法分析具体的每个线程所消耗的网络IO,因此当网络IO消耗高时,只能对线程进行dump,查找产生了大量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值