关于Java应用内存分配、占用及Linux/Unix系统内存查询的技术咨询
Java应用与Linux系统内存查询方法
1. 查询生产服务器上Java应用的总分配内存大小
- 先通过
jps命令获取Java进程的PID:jps -l - 针对目标PID,用以下方式查看:
- 用
jinfo直接读取启动参数中的内存配置:
这两个参数分别对应最大堆内存和初始堆内存,若应用未指定初始值,默认是最大堆内存的1/64。如果要统计包含非堆内存的总分配量,还需查看jinfo -flag MaxHeapSize <PID> jinfo -flag InitialHeapSize <PID>MaxMetaspaceSize等参数。 - 查看进程启动命令行参数:
直接找到cat /proc/<PID>/cmdline | tr '\0' ' '-Xmx(最大堆)、-Xms(初始堆)以及非堆相关的参数,这些就是分配给Java应用的总内存配置。
- 用
2. 查询Java应用已占用的内存量
- 用
jstat查看实时堆内存使用:
输出里的jstat -gcutil <PID> 1000 5S0U、S1U、EU、OU是堆内存各区域的已用大小,MU是元空间已用大小,总和即为已用内存。 - 用
jmap查看内存统计:
输出会明确列出已用堆内存、已用非堆内存的具体数值。jmap -heap <PID> - 从系统层面查看进程内存占用:
或top -p <PID>
其中ps aux | grep <PID>RES列是进程实际占用的物理内存,VSZ是虚拟内存大小。
3. 查询Linux/Unix系统可用内存的命令
free命令(最常用,带人类可读格式):free -havailable列显示的是系统实际可分配给新进程的内存(包含可释放的缓存)。cat /proc/meminfo:
可查看详细内存数据,cat /proc/meminfoMemAvailable字段对应系统可用内存。vmstat命令:
输出中vmstatfree列是空闲内存,buff和cache分别为缓冲区、缓存内存大小。
内容的提问来源于stack exchange,提问作者nilk3006
相关产品推荐
相关产品推荐

