java memoryfile_JAVA-内存及CPU排查

1.现象

CPU利用率高.

应用缓慢或无法对外提供服务.

2.原因

1.死循环

2.JVM堆占用过大-高频率FULL-GC

3.排查方法

1.使用top命令找出CPU消耗最大的进程

2.使用top -Hp 进程(上一步得到的进程号),找出消耗CPU的线程.

3.使用[jstack 进程与jstat -gcutil 进程 1000 100],找出线程在执行何种操作..

如果线程非GC线程,则直接可以根据调用堆栈找出具体的代码...

否则进行如下操作.

1.jstat -gcutil pid 1000 100用此命令跟踪GC回收...

4.jmap -dump:format=b,file=memoryfile.bin 【pid】

5.sz memoryfile.bin

6.使用mat打开memoryfile.bin文件.然后分析内存.找出内存问题解决..

4.实战

E404362C2D564F2A91CB1C2D51DB5725

70855129C39647C0B130DFCB3A313A15

F1CD351CC8894276BD5917BC598D4835

A00A28A9518A4527AA9EC6AAAB25A374

423ED74BAB3547E9BC5E9FDAE23A8B13

35D83A5E02DC4EA297E20E5A6CAA6F13

5.线上实例

2B4658330A3C4B96AD979771E33AB735

92175E2565F54D58940835A6F36D74D3

1ADB6C0678984B17ABD1F271AC71C5DA

35D83A5E02DC4EA297E20E5A6CAA6F13

六.例子源码

import java.util.LinkedList;

import java.util.List;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class TestMemory{

//private static byte[] byteArray=new byte[1024*1024*170];

private static List linkList=new LinkedList();

private static long count=1024*1024*240/56;

//private static List list=new CopyOnWriteArrayList();

public static void main(String[] args) throws Throwable{

for(int index=0;index

linkList.add(new Object ());

}

ExecutorService service= Executors.newFixedThreadPool(5);

for (int index=0;index<5;++index) {

service.submit(new Runnable() {

public void run() {

while (true) {

try {

Thread.sleep(100);

test();

} catch (Throwable throwable) {

throwable.printStackTrace();

}

}

}

});

}

System.in.read();

}

private static void test(){

byte[] bytes=new byte[1024*1024];

System.out.printf(bytes.toString());

}

}

public class TestProfile {

private Map map=new HashMap();

private static Object obj=new Object();

public static void main(String[] args) throws Throwable {

new TestProfile().test1();

}

public void test1() throws Throwable{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值