Linux常用命令
本文最后更新于:1 年前
[TOC]
使⽤两种命令创建⼀个⽂件?
a. touch a.txt
b. vi a.txt
c. mkdir abc
d. cat > a.txt 建⽴⼀⽂件,然后把接下来的键盘输⼊写⼊⽂件,直到按 Ctrl+D 为⽌.
linux 常⽤命令有哪些?
查找关闭端⼝进程 netstat -nlp | grep :3306 kill pid
删除⽂件 rm -rf
查找⽇志 cat xx.log | grep ‘xxx’ | more
解压 tar.gz tar -xzvf file.tar.gz
创建⽂件 touch filename cat > filename
修改⽂件 vi
怎么查看⼀个 java 线程的资源耗⽤?
linux 下,所有的 java 内部线程,其实都对应了⼀个进程 id,也就是说,linux 上的 jvm 将 java 程序中的线程映射为操作系统进 程。
1、jps -lvm 或者 ps -ef | grep java 查看当前机器上运⾏的 Java 应⽤进程
2、top -Hp pid 可以查看 Java 所有线程的资源耗⽤
3、printf “%x\n”pid 等到线程 ID 的 16 进制
4、jstack Java 应⽤进程 ID | grep 线程 ID 的 16 进制
Load 过⾼的可能性有哪些?
cpu load 的飙升,⼀⽅⾯可能和 full gc 的次数增⼤有关,⼀⽅⾯可能和死循环有关系
如何在 log⽂件中搜索找出 error 的⽇志?
cat xx.log | grep ‘error’
发现硬盘空间不够,如何快速找出占⽤空间最⼤的⽂件?
find . -type f -size +100M | xargs du -h | sort -nr
Java 服务端问题排查(OOM,CPU⾼,Load⾼,类冲突)?
a. 业务⽇志相关:
i. less 或者 moreii. grep
iii. tail -f filename
ps:切忌 vim 直接打开⼤⽇志⽂件,因为会直接加载到内存的
b. 数据库相关:
i. 登录线上库,show processlist 查看数据库连接情况
c. jvm 相关:
i. jps 显示 java 进程
ii. jinfo 实时查看和调整 jvm 参数
iii. jstat 监控 jvm 各种运⾏状态信息;
iv. jstack(Stack Trace for Java)命令⽤于⽣成 JVM 进程当前时刻的线程的调⽤堆栈,可以⽤来定位线程间死锁、
锁等待、等待外部资源等
v. jmap(Memory Map for Java) 命令⽤于⽣成堆转储快照 dump⽂件,除了这种⽅式还可以通过- XX:HeapDumpOnOutOfMemoryError参数,可以在虚拟机发⽣OOM 的时候⾃动⽣成堆的 dump⽂件,或者 kill -3 命令发出进程退出信号”吓唬”⼀下虚拟机,也能拿到 dump⽂件。
d. oom 问题:
i. 配置了-XX:+HeapDumpOnOutOfMemoryError, 在发⽣OOM 的时候会在-XX:HeapDumpPath⽣成堆的 dump⽂件,结合 MAT,可以对 dump⽂件进⾏分析,查找出发⽣OOM 的原因。
ii. 另外⼿动 dump 堆快照,可以使⽤命令 jmap -dump:format=b,file=file_name pid 或者 kill -3 pid
e. 死锁:
i. jps -v
ii. jstack -l pid
f. 线程 block、线程数暴涨:
i. jstack -l pid |wc -l
ii. jstack -l pid |grep “BLOCKED”|wc -l
iii. jstack -l pid |grep “Waiting on condition”|wc -l
线程 block 问题⼀般是等待 io、等待⽹络、等待监视器锁等造成,可能会导致请求超时、造成造成线程数暴涨导致系统 502 等。
g. 服务器问题:
i. cpu:top
ii. 内存:
- free -m -c10 -s1:
a. -m:以 MB 为单位显示,其他的有-k -g -b
b. -s: 间隔多少秒持续观察内存使⽤状况
c. -c:观察多少次
- vmstat 1 10:1 表示每隔 1s 输出⼀次,10 表示输出 10 次
a. r: 运⾏队列中进程数量,这个值也可以判断是否需要增加 CPU。(⻓期⼤于 1)
b. b: 等待 IO 的进程数量。
h. io:
i. iostat -m 1 10:
- -m:某些使⽤block 为单位的列强制使⽤MB 为单位
- 1 10:数据显示每隔 1 秒刷新⼀次,共显示 10 次
i. ⽹络:
i. netstat -antp:
-a (all)显示所有选项,默认不显示 LISTEN 相关
-t (tcp)仅显示 tcp 相关选项
-u (udp)仅显示 udp 相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服服务状态
-p 显示建⽴相关链接的程序名
Java 常⽤问题排查⼯具及⽤法(top,iostat,vmstat,sar,tcpdump,jvisualvm,jmap,jconsole)
Thread dump⽂件如何分析(Runnable,锁,代码栈,操作系统线程 id 关联)
a. Thread Dump 能诊断的问题
i. 查找内存泄露,常⻅的是程序⾥load⼤量的数据到缓存;
ii. 发现死锁线程;
b. 如何抓取 Thread Dump 信息:
i. ⼀般当服务器挂起,崩溃或者性能底下时,就需要抓取服务器的线程堆栈(Thread Dump)⽤于后续的分析。 在实际 运⾏中,往往⼀次 dump 的信息,还不⾜以确认问题。为了反映线程状态的动态变化,需要接连多次做 threaddump,每次间隔 10-20s,建议⾄少产⽣三次 dump 信息,如果每次 dump 都指向同⼀个问题,我们才确 定问题的典型性。
ii. linux 命令获取:
ps –ef | grep java
kill -< pid >
iii. jdk⾃带⼯具获取:
jps 或 ps –ef|grepjava (获取 PID)
jstack [-l ]< pid >| tee -a jstack.log (获取 ThreadDump)
如何查看 Java 应⽤的线程信息?
通过 top 命令拿到线程的 pid 后使⽤jstack 命令