基础---问题解析1

1、线程都有几种状态?哪些状态需要关注?
线程状态:runnable、waitting、timed-waitting、blocked、terminated
最影响性能的是blocked状态(阻塞,锁)的线程,timed-waitting(限时等待)

2、Jvm中持久代(方法区)中主要存放什么数据?老年代主要存放什么数据?
持久代中主要存放静态数据、常量、类的基本信息等
老年代中主要存放对象的实例和数组等

3、应用服务器cpu高和数据库服务器cpu高的分析思路是什么?
应用服务器的cpu高,先要看tps和响应时间,如果tps比较高,我们认为是正常的cpu消耗;如果tps比较低,那么往往某些代码过于消耗cpu,可以考虑使用jprofiler分析下
数据库服务器cpu高,往往是因为sql语句执行效率比较低,可以通过对数据库慢查询是监控,结合执行计划进行分析,是否是相关表没有索引或索引未生效

4、出现内存泄露的根本原因是什么?你是怎么定位内存泄露原因的?
内存泄露的根本原因是Jvm中老年代中存在着大量存活的对象,这些对象不能被GC回收掉,从而占满了整个老年代,造成Jvm一直处于FGC的状态,程序没有响应,服务器报OOM错误
内存泄露主要通过分析老年代中占用空间最大的类都有哪些,然后去代码中找对应的类的创建。通常可以使用jdk提供的jvisualvm和jmap进行堆内存的分析

5、tps压不上去,可能有哪些方面的原因?
a)压力机本身性能瓶颈
b)网络IO瓶颈
c)中间件(tomcat/nginx/mysql)连接数限制
b)Java线程的阻塞、等待
e)本系统资源的瓶颈(cpu、内存、磁盘、网络等)
f)其他外部系统响应时间过长,造成本系统的time-wait

posted @ 2021-07-19 09:52  沫笙*  阅读(27)  评论(0编辑  收藏  举报