高性能编程之系统性能调优篇

系统性能调优

jvm 基础概念及其工具

类加载机制

类生命周期:
在这里插入图片描述
类加载器
在这里插入图片描述
可以通过Java.Lang.Class.getClassLoad查看对应的类加载器,查看sun.misc.Launcher.AppClassloader读取Java.class.path配置,指定去加载哪些类资源
在这里插入图片描述
类不会重复加载

类卸载 该类的所有实例对象都被gc,加载该类的classloader实例被gc 可以通过verbose:class,来查看加载和卸载的日志
双亲委派模型 为了避免重复加载问题,由上到下逐级查找,由下到上逐级委托,首先不会自己去加载,交给父加载器去加载,若父加载器无法完成加载,子加载器才回去自己尝试加载

垃圾回收机制

自动垃圾收集 查看堆内存,识别正在使用的对象,那些对象未被删除,那些对象被删除但未被使用,c语言是手动释放和分配内存,Java中是由垃圾收集器自动处理

确定需要回收的对象 标记正在使用的对象

  1. 对象回收 引用计数
  2. 对象回收 可达性分析
    在这里插入图片描述
  3. 方法区回收 类卸载

引用类型和可达性级别

在这里插入图片描述
垃圾收集的算法
在这里插入图片描述

分代收集

在这里插入图片描述
垃圾收集器

  • 串行收集器(serial) client 模式下 serial gc serial old
    在这里插入图片描述
  • 并行收集器
  • 在这里插入图片描述
  • 并发收集器
    在这里插入图片描述
  • 并行收集器List item
  • 并发收集器
    在这里插入图片描述

jdk内置命令工具

  • javap 用于根据Java字节码文件反编译为源文件

  • jps 查看当前Java进程pid

  • jstat 监视Java虚拟机监控信息

  • jcmd 可以用于替代jps命令

  • jinfo 可以查看运行的jvm全部参数信息,还可以设置部分参数

  • jhat 查看堆信息,以html形式展示,支持对象查询语言qql

  • jmap
    在这里插入图片描述

  • jstack 堆栈跟踪工具
    可视化工具

  • jconsole

  • jvisualvm 支持插件工具

实际环境使用

cpu使用率 100%问题

  • 个别线程占用资源过多
    top 查看cpu 占用率 (查看汇总信息不是单个进程占用)
    top - p pid 查看个别进程
    H 查看线程cpu使用率 一般情况都是循环比较大
    在这里插入图片描述
    输出的日志十进制id转换为16进制去查找对应的代码

如果整体服务器资源不足,需要切断系统访问,再去执行上诉步骤

  • 死锁(活锁)
    响应时间很慢,设定一个间隔时间(与服务器运行情况有关系,假如说运行不会超过4秒,就按4秒时间)
    jstack pid > tmp1.log sleep 4s jstack pid > tmp2.log echo “完毕“

两个文件进行比对,找出交集
comm result-1.log result-2.log -1 -2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值