资讯专栏INFORMATION COLUMN

系统优化怎么做-JVM优化之开篇

gecko23 / 1054人阅读

摘要:几个死锁场景两个线程相互调用导致互相等待同步结束。线程为了检测死锁,它需要递进地检测所有被请求的锁。思考题线程有哪些状态这些线程大多处于什么样的状态分布我们可以称系统运行是健康的。

前言

在上一期Tomcat优化中,针对JVM相关主要参数做过一定说明,这一期主要介绍进行一些概念及经验。后面分章节去讲述相关工具的基本使用。

优化优先级

整体来讲,系统优化应先优化架构及代码,来解决具体功能点效率问题。最后通过JVM监控工具来发现一些隐藏较为深入的问题。

相关情形

内存占用并不断增加, 系统压力大情况下Full GC频繁,系统出现卡顿

线程出现大量等待及死锁, CPU使用率过高, 系统响应慢

堆(heap)内存不足或类加载导致JVM Crash,系统宕机

出现以上情况,就得使用工具分析JVM来确定问题
JVM内存模型

JDK1.7及以下

JDK1.8下,PermGen替换成Vm MetaSpace
Heap域

全局被所有线程分享

存所有对象及集合对象

方法域

全局被所有线程分享

存所有类的结构定义包含属性,方法及构造函数等

Thread1.N

本地私有栈,一个线程一个栈

保持着所有在Heap域的对象引用(4byte长度)

存储本地局部变量的存储(基础数据类型),程序运行状态,方法返回值

内存泄漏的分类

堆内存泄漏 - 比较常见

持久代内存泄漏

栈内存泄漏

系统资源内存泄漏 -比较常见

线程相关知识

JVM线程状态迁移

线程状态

初始化(New):初期创建,启动后则进入可执行状态

可执行状态(Runnable): 只要获取CPU时间,则开始执行

运行状态(Running): 正在使用CPU执行

阻塞状态(Bloked)

等待阻塞(wait)

同步阻塞(synchronized)

睡眠阻塞(sleep)

Join阻塞: 等待join子线程结束后,主线程才能执行,将异步执行的线程合并为同步的线程

结束状态: 线程执行完毕或者异常退出

性能监控关注点

系统线程总数

死锁线程 需要优先解决

线程Bloked总数数量

线程Bloked多的情况下,考虑对待处理数据进行分片,进行多通道,多线程处理提高系统性能
如果系统处理慢,但CPU占用一直很低,就需要梳理系统处理流程,串行处理该并行处理,并行处理流程提高并发来解决。

线程死锁

当两个或者多个线程尝试获取其他资源的锁,而每个线程又陷入无限等待其他资源锁的释放(相互等待),除非一个用户的进程被终止。

几个死锁场景

两个线程相互调用Thread.join(), 导致互相等待同步结束。

慎用线程join操作

当两个线程使用嵌套的同步块时,一个线程占用了另一个线程的必需的锁,互相等待时被阻塞,就有可能出现死锁。 也可能多个线程形成环状锁,比如线程A等待线程B,线程B等待线程C,线程C等待线程A。线程A为了检测死锁,它需要递进地检测所有被B请求的锁。从线程B所请求的锁开始,线程A找到了线程C,发现线程C请求的锁被线程A自己持有着。这是它就知道发生了死锁。

MySql死锁

MySql中两个线程同时对两条记录做先读后写操作
避免死锁

安全状态

找到一个分配资源的序列能让所有进程都顺利完成

银行家算法

采用预分配策略检查分配完成时系统是否处在安全状态
检测死锁

VisualVM(或其他工具)

监控线程状态,如果出现死锁得到相关代码位置

死锁定理化间资源分配图

利用死锁定理化间资源分配图来分析死锁的存在
参见以下资料:
https://www.coursera.org/lect...
总结

本章主要讲了一些核心知识,主要为了让大家了解系统优化到底优化和解决什么问题,什么是优化的目标。后续章节会讲到tomcat的JMX配置,VisualVM,Tprofile等工具的使用。

思考题

JVM线程有哪些状态,这些线程大多处于什么样的状态分布, 我们可以称系统运行是健康的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76806.html

相关文章

  • 系统优化怎么-开篇

    摘要:前言系统优化是一个系统工程需要长期监控长期及时解决的事情。主要从两个方面来讨论新系统上线前需要做些什么老系统优化有哪些途径新系统系统在设计时要考虑系统最大的等指标系统整个至少能支持业务最高峰来设计系统。 前言 系统优化是一个系统工程, 需要长期监控长期及时解决的事情。我一直在开发的一线,积累了一些经验,开这个专栏。欢迎大家一起讨论,互相学习及进步。 主要从两个方面来讨论 新系统上线前...

    jsummer 评论0 收藏0
  • 【转】成为Java顶尖程序员 ,看这10本书就够了

    摘要:实战高并发程序设计这本书是目前点评推荐比较多的书,其特色是案例小,好实践代码有场景,实用。想要学习多线程的朋友,这本书是我大力推荐的,我的个人博客里面二十多篇的多线程博文都是基于此书,并且在这本书的基础上进行提炼和总结而写出来的。 学习的最好途径就是看书,这是我自己学习并且小有了一定的积累之后的第一体会。个人认为看书有两点好处:showImg(/img/bVr5S5);  1.能出版出...

    DTeam 评论0 收藏0
  • 系统优化怎么-Tomcat优化

    摘要:运行模式分种模式一般使用模式效率低对系统配置有一些比较高的要求确认的运行模式配置文件关键配置最大线程数默认是最小活跃线程数默认是最大的等待队列个数,超过则请求拒绝默认值是,一般不改变。 前言 Tomcat作为Web应用的服务器,目前绝大多数公司都是用其作为应用服务器的,应用服务器的执行效率会影响系统执行,这里会讲Tomcat怎样进行配置能提高处理性能。另外必须提到对应的JVM参数的优化...

    gghyoo 评论0 收藏0

发表评论

0条评论

gecko23

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<