导出内存快照
使用jmap工具导出内存快照(堆转储文件)是一个常用的方法来分析Java应用程序的内存使用情况,尤其是在处理内存泄漏问题时。以下是使用jmap导出内存快照的基本步骤:
确定Java进程的PID:jps -lvm列出所有的进程以及PID
使用jmap导出内存快照:使用jmap命令并指定-dump选项来导出内存快照。这个快照包含了Java堆中所有对象的详细信息
jmap -dump:format=b,file=heapdump.hprof <pid>
直接使用图形化工具jvisualvm导出内存快照
Jemter性能测试
- 创建线程组、设置程数(每次有多少线程同时开启)、线程响应时间(多少秒完成线程)、循环次数(每个线程数需要开启几次)等
- 添加取样器-HTTP请求
- 添加监听器-查看结果树,可以看到每一个响应的返回结果
- 添加监听器-聚合报告,通过聚合报告查看执行结果,可以查看吞吐量
性能问题
明确问题,主要分内存满、CPU高、线程阻塞
定位哪块代码性能差,耗时久,使用jvisualvm这款jdk自带的性能工具,可以直接查看整个业务代码调用链中各个方法的耗时及占比,直接就能定界出是哪个方法性能差,耗时久。
内存问题: 主要是内存溢出,方法区内存溢出和堆内存溢出;
方法区用来存放class代码,通常解决办法就是调大jvm permSize参数值
比较常见的堆内存溢出。当然也可以调大jvm参数来解决,但若是不恰当代码引起的,首先检查下自己写的代码,看哪里创建了大量对象。若检查不出来,则使用jmap或jvisualvm导出内存快照。
CPU问题: 前台显示卡顿,响应时间长,linux top查看cpu使用率非常高
定位问题:
使用top查看进程pid,java系统通常进程名就叫java
用top -H -p pid查看进程中各线程的CPU使用情况,找出最占CPU的线程pid,注意这里其实就是tid
jstack pid打印线程堆栈,查看该线程的代码调用方法
线程问题: 请求响应直接超时,后台线程相互死锁
使用jvisualvm线程页签实时查看线程状态。查看指定业务线程状态,若长时间处于wait或block状态,则可确认该问题是由于线程阻塞引起的
Negix
Nginx是一个高性能、高并发的HTTP服务器和反向代理服务器,以其轻量级、稳定性和丰富的功能集而闻名,广泛应用于互联网项目中。
正向代理和反向代理的区别:正向代理位于客户端和互联网之间、反向代理位于客户端和服务器之间
Nginx实现负载均衡:Nginx实现负载均衡主要通过upstream模块和server指令来配置。
- 首先需要定义一个上游服务器组,这个组包含了所有后端服务器的信息。
- 然后,你需要在
server块中配置监听的端口和处理请求的规则。使用proxy_pass指令将请求转发到上游服务器组。
对计算机操作系统的理解
是管理计算机硬件与软件资源的系统软件,主要几个模块:进程管理、内存管理、文件系统、设备管理、安全管理
lsof指令
lsof指令的全称是 "list open files"。被用来列出当前系统中所有打开的文件。