htop:查进程的内存占用

$ htop

相关名词:

VIRT:virtual memory usage 虚拟内存

进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等

假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量

RES:resident memory usage 常驻内存

进程当前使用的内存大小,但不包括swap out

包含其他进程的共享

如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反

关于库占用内存的情况,它只统计加载的库文件所占内存大小

SHR:shared memory 共享内存

除了自身进程的共享内存,也包括其他进程的共享内存

虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小

计算某个进程所占的物理内存大小公式:RES – SHR

swap out后,它将会降下来

pmap:查进程的内存分布

先使用htop找到java进程的进程id,然后:

pmap -x 30420

上面的命令的输出结果没法进行排序找出较大的内存块,建议导出成文件,下载到自己本机分析。我自己的做法是在自己本机使用IDEA打开,然后利用多行编辑功能在每一列添加英文逗号“,”,因为这样能都对RSS(Resident Set Size)列排序,具体操作如下:

RSS 是常驻内存集(Resident Set Size),表示该进程分配的内存大小

导出:

# 在服务器上导出

pmap -x 30420 > pmap30420.csv

# 利用lszrz下载

sz -be pmap30420.csv

然后vscode(不要用IDEA,很卡。行数多的时候vscode没那么卡)打开,利用多行编辑(快捷键alt + shift + up/down)加英文逗号:

然后就可以用Excel打开,对第三列RSS倒序排序找出可疑的(占用多的)是哪些内存块:

NMT:查JVM内存

注意:NMT是用来看Java进程中JVM部分的内存情况,并非整个Java进程的内存情况

java -XX:NativeMemoryTracking=[detail|summary]

# 例如:

java -Xms500M -Xmx1500M -XX:NativeMemoryTracking=detail -jar ewulian-server.jar

然后使用jcmd

# 加detail是看详情

jcmd PID VM.native_memory [detail]

例如:

$ jcmd 30420 VM.native_memory > jcmd30420-summary.txt

$ cat jcmd30420-summary.txt

30420:

Native Memory Tracking:

Total: reserved=3201582KB, committed=991846KB

- Java Heap (reserved=1536000KB, committed=565760KB)

(mmap: reserved=1536000KB, committed=565760KB)

- Class (reserved=1141993KB, committed=104385KB)

(classes #15022)

(malloc=7401KB #29512)

(mmap: reserved=1134592KB, committed=96984KB)

- Thread (reserved=77490KB, committed=77490KB)

(thread #76)

(stack: reserved=77060KB, committed=77060KB)

(malloc=246KB #381)

(arena=184KB #147)

- Code (reserved=260241KB, committed=61473KB)

(malloc=10641KB #14504)

(mmap: reserved=249600KB, committed=50832KB)

- GC (reserved=61908KB, committed=58788KB)

(malloc=5784KB #490)

(mmap: reserved=56124KB, committed=53004KB)

- Compiler (reserved=365KB, committed=365KB)

(malloc=235KB #1216)

(arena=131KB #6)

- Internal (reserved=98440KB, committed=98440KB)

(malloc=98408KB #21205)

(mmap: reserved=32KB, committed=32KB)

- Symbol (reserved=20667KB, committed=20667KB)

(malloc=17590KB #178837)

(arena=3077KB #1)

- Native Memory Tracking (reserved=4353KB, committed=4353KB)

(malloc=412KB #5868)

(tracking overhead=3942KB)

- Arena Chunk (reserved=125KB, committed=125KB)

(malloc=125KB)

jcmd还有其它功能,比如查看Java进程的堆直方图

查看java进程的堆直方图

$ jcmd 30420 GC.class_histogram | less

说明:

GC.class_histogram:输出的仅包含活跃对象

[C:字符数组

[B:字节数组

[Ljava.lang.Object:Object数组

jcmd的其它功能可以通过help查看:

$ jcmd 30420 help

30420:

The following commands are available:

JFR.stop

JFR.start

JFR.dump

JFR.check

VM.native_memory

VM.check_commercial_features

VM.unlock_commercial_features

ManagementAgent.stop

ManagementAgent.start_local

ManagementAgent.start

VM.classloader_stats

GC.rotate_log

Thread.print

GC.class_stats

GC.class_histogram

GC.heap_dump

GC.finalizer_info

GC.heap_info

GC.run_finalization

GC.run

VM.uptime

VM.dynlibs

VM.flags

VM.system_properties

VM.command_line

VM.version

help

查java使用的内存_Java内存占用排查的方法相关推荐

  1. Java进程占用内存过高,排查解决方法

    Java进程占用内存过高,排查解决方法 参考文章: (1)Java进程占用内存过高,排查解决方法 (2)https://www.cnblogs.com/eeexu123/p/10913389.html ...

  2. mongodb 对内存的严重占用以及解决方法

    mongodb 对内存的严重占用以及解决方法[转载] 刚开始使用mongodb的时候,不太注意mongodb的内存使用,但通过查资料发现mongodb对内存的占用是巨大的,在本地测试服务器中,8G的内 ...

  3. 我的世界java占用太多内存_Java 进程占用内存过多,幕后元凶原来是线程太多

    那天中午吃饭,一个同事说,那个项目组的人快气死我了,程序有问题,早晨在群里@了他们,到中午才回消息,然后竟然还说他们的程序没有问题,是我们这边调用的太频繁了. 简直想笑. 背景说明 我们当前这个系统和 ...

  4. java 调内存_java内存设置

    最近进入天猫物流做运营支撑,需要在不同系统之间切换来切换去.由于各个系统的规模不一,所以遇到了一下在eclipse里调整VM启动参数的问题,拿出来分享下. JVM启动以后,会分配两类内存区域,一类用于 ...

  5. java 排序 内存_Java内存模型(二)——重排序

    一.重排序 重排序是指为了提高程序的执行效率,编译器和处理器常常会对语句的执行顺序或者指令的执行顺序进行重排. 编译器优化的重排序:编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序. ...

  6. java 溢出与泄露_Java内存溢出与栈溢出

    一.背景知识 1.JVM体系结构 2.JVM运行时数据区 3.JVM内存模型 JVM运行时内存 = 共享内存区 + 线程内存区 3-1.共享内存区 共享内存区 = 持久带 + 堆 持久带 = 方法区 ...

  7. java和硬件交互_Java内存模型

    Java内存模型 我们常说的JVM内存模式指的是JVM的内存分区:而Java内存模式是一种虚拟机规范,真实并不存在 Java虚拟机规范中定义了Java内存模型(Java Memory Model,JM ...

  8. java join使用实例_Java多线程中关于join方法的使用实例解析

    先上代码 新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String ...

  9. 海信JAVA开发笔试题_JAVA设计模式之【工厂方法模式】

    看例子 1.TV产品接口,负责播放 public interface TV // TV接口 { public void play(); } 2.TV工厂接口,负责生产产品 public interfa ...

最新文章

  1. 2017还有29天,你的目标实现了吗?|内有彩蛋
  2. restful可以转发么_什么是RESTFUL?REST的请求方法有哪些,有什么区别?
  3. keras cnn 代码详解
  4. Puppet的一些奇技淫巧
  5. 永久开启完整版Google Play
  6. 记一次 Redis Cluster 宕机引发的事故
  7. ubtuun怎么运行PHP文件_解决phpMyAdmin在Ubuntu 16.04/PHP7.0下的Deprecation Notice
  8. C经典100题(1)
  9. 使用java6做webservice 的客户端
  10. 过采样之SMOTE算法
  11. 银行客户用户画像_大数据精准营销用户画像是核心-金融业大数据用户画像实践...
  12. educoder考试可以切屏吗_线上考试真的好多人作弊吗?
  13. 多媒体的基础知识:感觉媒体、表现媒体、表示媒体、传输媒体、存储媒体
  14. 符冉迪 计算机 培训,一种卫星云图的二次聚类分割方法专利_专利申请于2012-11-30_专利查询 - 天眼查...
  15. html批量替换不同关键词,JS批量替换内容中关键词为超链接
  16. Activity启动另一个Activity并返回的完整生命周期
  17. RO、RW和ZI的区别
  18. (ROC-RK3568-PC) 裸机19_VOP2和IEP笔记
  19. 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
  20. 体积小性能强悍能吃鸡的电脑主机 NUC8I7HVK

热门文章

  1. Hotspot 垃圾回收之ReferenceProcessor(二) 源码解析
  2. android 4.0 安全模式分析
  3. vue中threejs报错记录:Class constructor Object3D cannot be invoked without ‘new‘
  4. windows安装linux子系统,并装在其他系统盘的方法
  5. IE 阻止过期的 ActiveX 控件
  6. LMD DesignPack的使用技巧:如何设置典型的设计环境?
  7. Mysql预编译动态拼接表名查询
  8. PYQT5 Painter的简单入门
  9. springboot 第章 springboot 与索引
  10. Python实现SSA智能麻雀搜索算法优化支持向量机回归模型(SVR算法)项目实战