我的程序哪里出错了? --本地没问题,怎么线上异常呢,深入程序堆栈看一看

本文介绍了Java程序员如何进行堆栈调试,包括使用top命令查看进程信息,利用top -Hp -pid、printf和jstack命令深入分析CPU高占用和内存泄漏等问题。通过线程状态分析,如Deadlock、Runnable、Waiting等,帮助定位并解决线上异常。
摘要由CSDN通过智能技术生成

java程序员简单堆栈调试

        新年到了,重新注册了一个账号,满打满算去年刚毕业,工作时间很短,工作中和继续学习中越来越觉得知识的匮乏,所以准备每周发一篇自己整理的知识点的贴子。

回到正题上,工作中一些生产环境总会触碰到稀奇古怪的问题让人头大,有时候调试半天也发现不了问题,然后人就傻了,或者说,有可能也会出现本地一点点问题都没有,然后上线后过几天就出现问题了,什么内存泄露过载,死锁都有可能不能及时发现,所以服务器的堆栈调试是必要学的一课。

操作流程

top命令

我用的是linux系统的服务器,首先可以使用top命令查看下进程信息,里面有

top - 10:37:36 up 109 days, 14:20,  5 users,  load average: 0.11, 0.05, 0.01
Tasks: 785 total,   1 running, 783 sleeping,   1 stopped,   0 zombie
Cpu(s):  0.1%us,  0.1%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  132166720k total, 128446776k used,  3719944k free,   393164k buffers
Swap:        0k total,        0k used,        0k free, 62456412k cached

这样的信息,主要对应的是

第一行(top):
        “00:11:04”为系统当前时刻;
        “3:35”为系统启动后到现在的运作时间;
        “2 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;
        “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;

第二行(Tasks):
    “59 total”为当前系统进程总数;
    “1 running”为当前运行中的进程数;
    “58 sleeping”为当前处于等待状态中的进程数;
    “0 stoped”为被停止的系统进程数;
    “0 zombie”为被复原的进程数;   

第三行(Cpus):
    分别表示了 CPU 当前的使用率;

第四行(Mem):
    分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值