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):
分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;