• 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.实战
     
     
     
     
     
     
     
    5.线上实例
     
     
     
     
     
     
     
     
    六.例子源码
     
    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<Object> linkList=new LinkedList<Object>();
    private static long count=1024*1024*240/56;
    //private static List<Object> list=new CopyOnWriteArrayList<Object>();
    public static void main(String[] args) throws Throwable{
    for(int index=0;index<count;++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<TestHashCode,Object> map=new HashMap<TestHashCode,Object>();
    private static Object obj=new Object();
    public static void main(String[] args) throws Throwable {
    new TestProfile().test1();
    }
     
    public void test1() throws Throwable{

  • 相关阅读:
    插件制作入门
    Hank老师推荐的一些博客
    高级iOS工程师的博客
    查看一个文件是否支持64位 方法 ,[symbol(s) not found for architecture x86_64]相关
    ssh-keygen的使用方法及配置authorized_keys两台linux机器相互认证
    使用git在两台机器间同步代码
    scp远程拷贝命令
    后台启动程序并重定向输出信息脚本
    automake 工具的使用
    minigui启动过程
  • 原文地址:https://www.cnblogs.com/hhbk/p/8460846.html
Copyright © 2020-2023  润新知