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. 内存:

  1. free -m -c10 -s1:

a. -m:以 MB 为单位显示,其他的有-k -g -b

b. -s: 间隔多少秒持续观察内存使⽤状况

c. -c:观察多少次

  1. vmstat 1 10:1 表示每隔 1s 输出⼀次,10 表示输出 10 次

a. r: 运⾏队列中进程数量,这个值也可以判断是否需要增加 CPU。(⻓期⼤于 1)

b. b: 等待 IO 的进程数量。

h. io:

i. iostat -m 1 10:

  1. -m:某些使⽤block 为单位的列强制使⽤MB 为单位
  2. 1 10:数据显示每隔 1 秒刷新⼀次,共显示 10 次

i. ⽹络:

i. netstat -antp:

  1. -a (all)显示所有选项,默认不显示 LISTEN 相关

  2. -t (tcp)仅显示 tcp 相关选项

  3. -u (udp)仅显示 udp 相关选项

  4. -n 拒绝显示别名,能显示数字的全部转化成数字。

  5. -l 仅列出有在 Listen (监听) 的服服务状态

  6. -p 显示建⽴相关链接的程序名

  7. Java 常⽤问题排查⼯具及⽤法(top,iostat,vmstat,sar,tcpdump,jvisualvm,jmap,jconsole)

  8. 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 命令