liunx排查问题常用命令

1.基本排查

liunx 命令查看基本运行信息

1.top,查看cpu及其他信息,以下为top子命令: 

1 查看cpu 个数,及各核的使用情况   

P 按照 进程 cpu 的使用率排序 (默认情况)

M 按照 内存的使用情况排序

q 退出

shift +< 上一页

shift +> 下一页

r 调整nice 值 renice

f 选择显示那一列

F,O 按那一列排序

k 杀死一个进程

c 显示command详细信息

参数意思 基本可以见名知意  不知道的可以自行百度

2.free  查看内存命令

1). free -b:以bytes为单位来显示内存的信息

2).free -k : 以kb为单位来显示内存的信息

3).free -m:以m为单位来显示内存的信息

4). free -g:以G为单位来显示内存的信息

5).free -h:以适于人类可读方式显示内存信息。-h与其他命令最大不同是-h选项会在数字后面加上适于人类可读的单位

6).free -l:显示高低内存的利用率

7).free -t:显示linux的全部内存

8).free -s N:表示每隔N秒打印一次内存信息,直到用ctrl+c结束

9).free -c N:表示重复打印内存信息N次

基本命令可以选择组合使用

3.df 命令可显示所有文件系统对I节点和磁盘块的使用情况

1).df -a:显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统。

2).df -h:以容易理解的格式输出文件系统大小,例如124KB、345MB、46GB。

3).df -i:显示i节点信息,而不是磁盘块。

4).df -t:显示各指定类型的文件系统的磁盘空间使用情况。

5).df -x:列出不是某一指定类型文件系统的磁盘空间使用情况。

6).df -T:显示文件系统类型。

4.热点cpu定位

1).使用top查看占用cpu高的进程

2).使用 jstack <pid>  > stack.log  将该进程的日志信息打印到文件中

3).通过进程id,得到它的子线程id  top -p <pid> -H  此命令可以查看每个子线程占用情况

4).看到子线程的pid,将pid转为16进制  liunx有转换命令 printf "%x" <thread_id>

5).拿到16进制pid,到日志文件中(stack.log)找到对应pid  即可查看问题代码

2.java程序的监控

JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole,还有jps,jmap,jstat,jstack,jhat等小工具。

1. jps(Java Virtual Machine Process Status Tool)  

命令格式:jps [options ] [ hostid ]

1)jps

2)jps –l:输出主类或者jar的完全路径名

3)jps –v :输出jvm参数

4)jps –q :仅仅显示java进程号

5)jps -mlv 192.168.2.11

jps -ml   列出JVM中运行的进程状态信息(这里可以获取某个进程的pid, 供后续命令使用)

2. jstat(JVM统计监测工具)

jstat -gcutil <pid> 10s 3   对堆内存的使用情况、gc信息等进行实时的命令行统计

3. jstack  

查看某个Java进程内的线程堆栈信息。

jstack可以定位到线程堆栈,根据堆栈信息我们可以定位到具体代码,所以它在JVM性能调优中使用得非常多。

使用方法参见:6. 热点CPU

4. jmap

生成堆内存快照

jmap -heap <pid>查看进程堆内存信息,了解即可

jmap -dump:format=b,file=xxx.hprof <pid>  把进程内存使用情况dump到文件中。Dump文件是 进程的 内存镜像

jmap -dump:live,format=b,file=xxx.hprof <pid> 统计存活的对象信息

dump出来的文件可以用MAT、VisualVM等工具查看,也可以用jhat查看

5. jhat

查看dump出来的文件

jhat -port 9998 xxx.hprof

然后就可以在浏览器中输入主机地址:9998查看了,比如: http://localhost:9998

不推荐,因为有的文件很大,打开会很慢,看起来也费劲,推进用MAT分析

6. 热点cpu   

cpu占用率持续的比较高

定位步骤:

jps -m -l                   列出正在运行的进程----这里是否用top命令更好一些?top才能看出谁占用cpu最高                       

top -H -p pid           找出该进程内最耗费cpu的线程

printf "%x\n" tid      线程id转化为16进制

jstack pid | grep 转化为16进制的tid -A 50

备注1:展示的信息中,重点关注自己编写的代码,截图给开发

备注2:有可能一次jstack不能捕捉到需要的信息,那么需要多次执行,因为抓的是那一瞬间的状态

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容