iMisty的技术栈

iMisty的技术栈

Linux调优相关命令

1366
2021-01-09

TIPS

本文基于CentOS 7编写,理论支持所有所有版本Linux发行版,部分命令的个别参数在不同版本中可能存在细微的差异。

入门级命令

# 切换目录
cd
# 示例
# 切换到上一层目录
cd ..
# 切换到/opt/software
cd /opt/software


# 显示工作目录
pwd


# 显示指定工作目录下之内容
ls
# 示例
# 列出当前目录中文件及目录的详情
ls -l
# 列出当前目录及其子目录中文件及目录的详情
ls -lR


# 创建目录
mkdir
# 示例
# 创建目录aaa
mkdir aaa
# 在bbb目录下创建目录aaa,如果bbb目录不存在,就创建一个
mkdir -p bbb/aaa


# 删除目录
rmdir
# 示例
# 删除目录aaa
rmdir aaa
# 删除bbb目录下的aaa目录,如果aaa删除后,bbb目录为成为空目录,则将bbb也删除
rmdir -p bbb/aaa


# 将指定文件的访问时间及修改时间设为当前时间,若文件不存在,则会自动创建该文件
touch
# 示例
# 将aaa文件的访问时间及修改时间设为当前时间,如果aaa不存在,则会自动创建该文件
touch aaa


# 删除文件或目录(一旦通过rm命令删除,将无法恢复,务必小心使用)
rm
# 示例
# 删除test.txt(此格式只能rm 文件;如果使用了rm 目录,则会提示是目录,无法删除)
rm  test.txt 
# 递归删除test_dir目录及其内容
rm  -r test_dir


# 为文件或目录改名、或将文件或目录移入其它位置
mv
# 示例
# 将test.txt改名为damu.txt
mv test.txt damu.txt
# 将aaa目录放入bbb目录中;如果bbb目录不存在,则将aaa改名为bbb
mv aaa bbb


# 以树状图列出目录的内容
tree


# 杀死进程
kill
# 示例
# 杀死9999这个进程
kill 9999
# 查看信号
kill -l
# 发送SIGHUP信号杀死9999这个进程
kill -HUP 9999
# 使用SIGKILL信号杀死9999这个进程
kill -9 9999


# 将所有行程以树状图显
pstree
# 示例
# 展示该进程的完整指令及参数
pstree -a


# 关机
# 示例:
shutdown
# 立即关机
shutdown -h now
# 10分钟后关机
shutdown -h 10
# 立即重启
shutdown -r now


# 重启
reboot


# 设置或显示环境变量
export
# 示例
# 列出当前的环境变量
export -p
# 设置环境变量JAVA_HOME=xxx
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home


# 设定权限
# u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
# + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
# r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
chmod 
# 示例
# 将test.txt设为所有人皆可读取
chmod a+r test.txt
# 将文件test1.txt与test2.txt设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod ug+w,o-w test1.txt test2.txt
# 使用数字形式设置权限,语法是chmod abc file。其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
# r=4,w=2,x=1
# 若要rwx属性则4+2+1=7;
# 若要rw-属性则4+2=6;
# 若要r-x属性则4+1=5
chmod 777 file


# 将指定文件或目录的拥有者改为指定的用户或组
chown
# 示例
# 将的拥有者设为nginx,群体的使用者nginx
chown nginx:nginx nginx.conf
# 递归将当前目录下的所有文件与子目录的拥有者皆设为nginx,群体的使用者为nginx
chown -R nginx:nginx *


# 查找文件里符合条件的字符串
grep
# 示例
# 在当前目录中,查找后缀为txt的文件中,包含test字符串的文件,并打印字符串所属的行
grep test *txt
# 递归查找/opt目录中,包含test字符串的文件,并打印字符串所属的行
grep -r test /opt
# 查找1.txt中不包含test的行
grep -v test 1.txt


# 打开文件并输出
# 示例
# 打开1.txt
cat 1.txt
# 为1.txt添加行号,并输出到2.txt中
cat -n 1.txt > 2.txt


# 查找指定目录下的文件
find
# 查找当前目录下的所有txt文件
find . -name *.txt
# 查找机器中所有大于50M的文件
find / -type f -size +50M
# 查找机器中所有小于50M的文件,并用du -h展示出来
find / -type f -size +50M -exec du -h {} ;

系统

查看操作系统发行版本

不同的Linux发行版(例如CentOS与Debain)、以及不同版本(例如CentOS 6.x与CentOS 7.x)查看版本的方式不同,下面罗列了笔者知道的所有方式,总有一款能适用于你的环境。

  • 方法1:通过 /etc 目录下的文件查看

  • /etc/os-release

  • /etc/system-release

  • /etc/redhat-release

  • /etc/centos-release

  • /etc/issue

  • 方法2:执行 lsb_release -a

uname

作用:

显示系统信息

语法:

Usage: uname [OPTION]...
Print certain system information.  With no OPTION, same as -s.

  -a, --all                打印所有信息
  -s, --kernel-name        打印内核名称
  -n, --nodename           打印网络节点主机名
  -r, --kernel-release     打印内核版本
  -v, --kernel-version     打印内核版本
  -m, --machine            打印硬件名称
  -p, --processor          打印处理器类型
  -i, --hardware-platform  打印硬件平台
  -o, --operating-system   打印操作系统
      --help     帮助
      --version  显示版本

使用:

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

结果解读:

  • Linux:内核名称
  • localhost.localdomain:主机名
  • 3.10.0-327.el7.x86_64:内核版本
  • #1 SMP Thu Nov 19 22:10:57 UTC 2015:内核版本
  • x86_64:硬件名称
  • x86_64:处理器类型
  • x86_64:硬件平台
  • GNU/Linux:操作系统

常见用法:

    uname -a

uptime

作用:

展示系统启动运行了多久

语法:

Usage:
 uptime [options]

Options:
 -p, --pretty   对输出结果格式化
 -h, --help     展示帮助
 -s, --since    展示操作系统的启动时间
 -V, --version  展示版本

使用:

[root@localhost ~]# uptime
 18:52:01 up 48 days, 18:24,  4 users,  load average: 0.00, 0.01, 0.05

结果解读:

  • 18:52:01:当前时间
  • 48 days, 18:24:启动了48 days, 18:24这么久
  • 4 users:当前登录了2个用户
  • load average: 0.00, 0.01, 0.05:平局负载,后面的数字分别是最近1分钟、5分钟、15分钟的平均负载

用户相关

id

作用:展示用户的ID、以及所属群组的ID

语法:

Usage: id [OPTION]... [USER]
Print user and group information for the specified USER,
or (when USER omitted) for the current user.

  -a             忽略,只是为了和其他版本兼容
  -Z, --context  只打印当前用户的安全上下文
  -g, --group    只打印有效的group ID
  -G, --groups   打印所有group ID
  -n, --name     打印名称而不是号码,和-u/-g/-G配合使用
  -r, --real     打印真实ID而非有效ID,和-u/-g/-G配合使用
  -u, --user     只打印有效的用户ID
  -z, --zero     以NULL而非空格分隔结果
      --help     帮助
      --version  展示版本

Without any OPTION, print some useful set of identified information.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'id invocation'

使用:

# 查看当前用户相关信息
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root)

结果解读:

  • uid:用户id及名称
  • gid:用户当前所使用的组的id及名称
  • groups:用户拥有的所有组的id及名称

常见用法:

# 查看当前用户相关信息
id
# 查看MySQL这个用户的相关信息
id mysql

TIPS

如果大家不知道什么是有效ID、什么是真实ID,可以阅读下这个文章:https://www.annhe.net/article-4458.html

w

作用:

展示当前登录系统的用户信息

语法:

Usage:
 w [options]

Options:
 -h, --no-header     do not print header
 -u, --no-current    ignore current process username
 -s, --short         short format
 -f, --from          show remote hostname field
 -o, --old-style     old style output
 -i, --ip-addr       display IP address instead of hostname (if possible)

     --help     display this help and exit
 -V, --version  output version information and exit

使用:

[root@localhost ~]# w
 18:55:14 up 48 days, 18:28,  4 users,  load average: 0.05, 0.03, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    222.94.228.56    18:07   42:34   0.04s  0.04s -bash
root     pts/1    222.94.228.56    18:18   24:50   0.25s  0.06s -bash
root     pts/2    222.94.228.56    18:41   13:48   0.02s  0.02s -bash
root     pts/3    222.94.228.56    18:49    2.00s  0.05s  0.02s w

结果解读:

  • 第一行:类似uptime

  • USER:当前登录的用户有哪些

  • TTY:虚拟终端的别名,可以认为是一个会话的名称

  • FROM:你从那台机器登录进来的

  • LOGIN:什么时候登录的

  • IDLE:空闲时间

  • JCPU:是指连接上这个TTY的所有进程所占用的时间,不包括过去的后台作业时间;

  • PCPU:当前进程所占用的时间

  • WHAT:这个用户当前运行的进程是什么

who

作用:展示当前登录用户的信息

语法:

Usage: who [OPTION]... [ FILE | ARG1 ARG2 ]
Print information about users who are currently logged in.

  -a, --all         等价于-b -d --login -p -r -t -T -u
  -b, --boot        系统启动时间
  -d, --dead        打印死亡的进程
  -H, --heading     打印标题
  -l, --login       打印系统登录过程
      --lookup      尝试通过DNS规范化主机名
  -m                相当于who am i
  -p, --process     打印由init产生的活动进程
  -q, --count       显示登入系统的用户名和总人数
  -r, --runlevel    打印当前运行级别
  -s, --short       仅打印name, line, time(默认)
  -t, --time        打印最近的系统时钟修改
  -T, -w, --mesg    将用户的消息状态添加为+,-或?
  -u, --users       列出登录的用户
      --message     和-T相同
      --writable    和-T相同
      --help     帮助
      --version  版本

If FILE is not specified, use /var/run/utmp.  /var/log/wtmp as FILE is common.
If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'who invocation'

使用:

[root@localhost ~]# who
root     pts/0        2020-06-27 23:51 (222.94.228.56)
root     pts/1        2020-06-27 21:54 (222.94.228.56)

结果解读:

  • root:登录的用户是谁
  • pts/0:虚拟终端别名
  • 2020-06-27 23:51 (222.94.228.56):登录时间与远程IP

常见用法:

# 显示当前登录系统的用户
who

# 展示详情,相当于who -b -d --login -p -r -t -T -u
who -a

# 显示自己的信息
who am i

# 打印标题
who -H

# 显示登入系统的用户名和总人数
who -q

whoami

作用:

显示自身用户名称

语法:

Usage: whoami [OPTION]...
Print the user name associated with the current effective user ID.
Same as id -un.

      --help     帮助
      --version  版本

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'whoami invocation'

使用:

whoami

last

作用:

显示用户最近登录信息

语法:

Usage: last [-num | -n num] [-f file] [-t YYYYMMDDHHMMSS] [-R] [-adioxFw] [username..] [tty..]

常用参数:

  • -R:结果省略从哪里登录的一栏
  • -num/-n/num:展示前num条
  • username:展示指定用户的登录信息
  • tty:只显示指定虚拟终端的登录信息

更多参数详见 man last

使用:

[root@localhost ~]# last 
root     pts/1        222.94.228.56    Mon Jun 29 22:53   still logged in   
root     pts/0        222.94.228.56    Mon Jun 29 22:47   still logged in   
root     pts/5        222.94.228.56    Sat Jun 27 23:58 - 03:07  (03:08)    
root     pts/0        222.94.228.56    Sat Jun 27 23:51 - 00:56  (01:04)    
root     pts/4        222.94.228.56    Sat Jun 27 23:39 - 00:56  (01:17)    

结果解读:

  • root:谁登陆的
  • pts/1:虚拟终端的别名,可以认为是一个会话的名称
  • 222.94.228.56:展示登录机器的主机名,表示从哪里登陆的
  • Mon Jun 29 22:53 still:登录的起止时间
  • logged in:持续了多久

常见用法:

# 只显示2条
last -2

# 展示root用户的登录信息
last username root

# 显示虚拟终端别名为pts/1的登录信息
last tty pts/1

CPU相关

cpuinfo

作用:查看CPU信息

使用:

cat /proc/cpuinfo

结果解读:

# 概念:
1. 物理CPU数:主板上实际插入的cpu数量
2. CPU核心数:单块CPU上面能处理数据的芯片组的数量,如双核、四核等
3. 逻辑CPU数:一般来说:
   逻辑CPU=物理CPU个数×每颗核数       # 不支持超线程技术或未开启此技术
   逻辑CPU=物理CPU个数×每颗核数 *2     # 表示服务器的CPU支持超线程技术(简单来说,它可使处理器中的1 颗内核如2 颗内核那样在操作系统中发挥作用。这样一来,操作系统可使用的执行资源扩大了一倍,提高了系统的整体性能)


# 逻辑处理核心数的编号,从0开始排序
processor       : 0
# CPU厂商
vendor_id       : GenuineIntel
# CPU产品系列代号
cpu family      : 6
# CPU属于其系列中的哪一代的代号
model           : 45
# CPU的型号、主频
model name      : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz
# CPU所属制作更新版本
stepping        : 7
# 微代码
microcode       : 0xffffffff
# CPU当前所使用的主频
cpu MHz         : 1999.994
# 二级缓存大小
cache size      : 15360 KB
# 物理id
physical id     : 0
# 单个物理CPU的逻辑CPU数
siblings        : 8
# 当前物理核在其所处CPU中的编号,这个编号不一定连续
core id         : 0
# CPU核心数
cpu cores       : 8
# 用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续
apicid          : 0
# 初始的apicid
initial apicid  : 0
# 是否具有浮点运算单元(Floating Point Unit)
fpu             : yes
# 是否支持浮点计算异常
fpu_exception   : yes
# 执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容
cpuid level     : 13
# 表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)
wp              : yes
# 当前CPU支持的功能
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx hypervisor lahf_lm xsaveopt
# 在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)
bogomips        : 3999.98
# 每次刷新缓存的大小单位
clflush size    : 64
# 缓存地址对齐单位
cache_alignment : 64
# 可访问地址空间位数
address sizes   : 42 bits physical, 48 bits virtual
# 对能源管理的支持
power management:

常见用法:

# 查询系统有几颗物理CPU(结果有几行说明有几个物理CPU)
cat /proc/cpuinfo | grep "physical id" |sort |uniq

# 查询系统每颗物理CPU的核心数
cat /proc/cpuinfo | grep "cpu cores" | uniq

# 每颗物理CPU核心是否启用超线程技术。如果启用此技术那么,每个物理核心又可分为两个逻辑处理器
cat /proc/cpuinfo | grep -e "cpu cores"  -e "siblings" | sort | uniq

# 查询系统具有多少个逻辑CPU
cat /proc/cpuinfo | grep "processor" | wc -l

TIPS

参考:https://www.cnblogs.com/wxxjianchi/p/10522049.html

top

作用:

显示、管理执行中的程序

语法:

Usage:
  top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

常用参数:

  • d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
  • q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
  • c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
  • s : 安全模式,将交谈式指令取消, 避免潜在的危机
  • i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
  • n : 更新的次数,完成后将会退出 top
  • b : 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内

使用:

[root@localhost ~]# top
top - 18:57:49 up 48 days, 18:30,  4 users,  load average: 0.02, 0.03, 0.05
Tasks: 288 total,   1 running, 279 sleeping,   8 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1009368 total,    74540 free,   519392 used,   415436 buff/cache
KiB Swap:  1048572 total,   570600 free,   477972 used.   249136 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                          
 2737 mongod    20   0 1571560  64216   5156 S   1.0  6.4 534:08.38 mongod                                                                                                                                           
 1783 root      20   0  148336   2260   1428 R   0.7  0.2   0:00.10 top                                                                                                                                              
14047 root      20   0       0      0      0 S   0.3  0.0   0:21.71 kworker/6:2                                                                                                                                      
    1 root      20   0   49860   2212   1300 S   0.0  0.2  28:02.47 systemd          

结果解读:

  • 第一行:展示了系统运行的时间、有几个用户,平均负载等信息。这个结果和uptime一样

  • 第二行:展示了任务的相关信息,包括总共有多少任务、多少任务在任务在运行;多少在睡眠、多少停止了,多少个僵尸状态的任务等

  • 第三行:CPU状态

    • us(user):运行用户进程的CPU时间
    • sy(system):运行内核进程的CPU时间
    • ni(niced):运行已调整优先级的用户进程的CPU时间
    • id(idle):空闲时间
    • wa(IO wait):用于等待IO完成的CPU时间
    • hi:处理硬件中断的CPU时间
    • si:处理软件中断的CPU时间
    • st:被hypervisor偷去的CPU时间
  • 第四行:内存状态,包括全部可用内存、已使用内存、空闲内存、缓冲内存

  • 第七行开始:各个进程任务的的状态监控

  • PID:进程号

    • USER:运行这个进程的用户是谁

    • PR:展示进程的实时优先级,取值0-99,越大则会持有更多的CPU时间片。

    • NI:展示进程的nice值,值越小,优先级越高。意味着越高的优先级

    • VIRT:virtual memory usage,进程使用的虚拟内存。VIRT = SWAP + RES

    • RES:resident memory usage,常驻内存,驻留内存是进程使用的非交换物理内存。RES = CODE + DATA

    • SHR:shared memory,共享内存

    • S:进程状态,取值如下:

      • D:不可中断的睡眠态。
      • R:运行态
      • S:睡眠态
      • T:被跟踪或已停止
      • Z:僵尸态
    • CPU:自从上一次更新时到现在任务所使用的CPU时间百分比

    • MEM:进程使用的可用物理内存百分比

    • TIME:进程使用的总CPU时间,精确到0.01秒

    • COMMAND:进程所使用的命令

常见用法:

# 展示完整命令(COMMAND)
top -c

# 设置更新次数(更新2次后就退出)
top -n 2

# 指定更新周期(每隔3秒刷新一次)
top -d 3

# 查看指定进程的信息
top -p 139

# 显示指定进程中线程的运行信息
top -Hp 139

参考文章:https://www.cnblogs.com/fuqu/p/10230385.html

进程相关

ps

作用:

展示程序运行情况

语法:

Usage:
 ps [options]

Basic options:
 -A, -e               all processes
 -a                   all with tty, except session leaders
  a                   all with tty, including other users
 -d                   all except session leaders
 -N, --deselect       negate selection
  r                   only running processes
  T                   all processes on this terminal
  x                   processes without controlling ttys

Selection by list:
 -C <command>         command name
 -G, --Group <GID>    real group id or name
 -g, --group <group>  session or effective group name
 -p, p, --pid <PID>   process id
        --ppid <PID>  parent process id
 -q, q, --quick-pid <PID>
                      process id (quick mode)
 -s, --sid <session>  session id
 -t, t, --tty <tty>   terminal
 -u, U, --user <UID>  effective user id or name
 -U, --User <UID>     real user id or name

  The selection options take as their argument either:
    a comma-separated list e.g. '-u root,nobody' or
    a blank-separated list e.g. '-p 123 4567'

Output formats:
 -F                   extra full
 -f                   full-format, including command lines
  f, --forest         ascii art process tree
 -H                   show process hierarchy
 -j                   jobs format
  j                   BSD job control format
 -l                   long format
  l                   BSD long format
 -M, Z                add security data (for SELinux)
 -O <format>          preloaded with default columns
  O <format>          as -O, with BSD personality
 -o, o, --format <format>
                      user-defined format
  s                   signal format
  u                   user-oriented format
  v                   virtual memory format
  X                   register format
 -y                   do not show flags, show rss vs. addr (used with -l)
     --context        display security context (for SELinux)
     --headers        repeat header lines, one per page
     --no-headers     do not print header at all
     --cols, --columns, --width <num>
                      set screen width
     --rows, --lines <num>
                      set screen height

Show threads:
  H                   as if they were processes
 -L                   possibly with LWP and NLWP columns
 -m, m                after processes
 -T                   possibly with SPID column

Miscellaneous options:
 -c                   show scheduling class with -l option
  c                   show true command name
  e                   show the environment after command
  k,    --sort        specify sort order as: [+|-]key[,[+|-]key[,...]]
  L                   show format specifiers
  n                   display numeric uid and wchan
  S,    --cumulative  include some dead child process data
 -y                   do not show flags, show rss (only with -l)
 -V, V, --version     display version information and exit
 -w, w                unlimited output width

        --help <simple|list|output|threads|misc|all>
                      display help and exit

常用参数:

  • -A或e:列出所有的行程
  • -w:显示加宽可以显示较多的资讯
  • -f:“全格式”展示,返回的字段较多
  • a:展示当前运行的所有程序,包括其他用户的程序
  • …其他的大家自己看下help吧,没动力翻译了……

示例:

# 全格式展示所有进程
ps -ef

# 显示较详细的信息,比如进程占用的CPU、内存等
ps -au

# 显示所有包含其他使用者的行程
ps -aux

jobs

个人经验,使用较少

作用:

显示Linux中的任务列表及任务状态

  • Ctrl+Z组合键将当前进程挂起(调入后台并停止运行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,我们使用windows系统是有时候在本地计算机搜索东西时,发现他搜索的老慢了甚至电脑都有点卡,我们突然不想让它搜了,就想马上让它停止搜索,就是这种感觉。使用jobs命令,可以查看当前终端在后台的进程任务
  • 任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号

语法:

jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]

第一种格式列出活动的任务,选项含义如下:
-l	除常规信息外,还列出进程号
-n	仅显示有关自从上次通知用户状态以来,更改状态的任务信息
-p	只显示任务的进程组leader的进程id
-r	只显示正在运行的任务
-s	只显示已停止的任务
如果指定了jobspec,则只展示jobspec的相关信息

如果指定了-x选项,则job会替换在command或args中找到的所有jobspec与相应的进程组id,并将其传递给command

常见用法:

jobs -l

pgrep

作用:根据特定条件查询进程PID信息

语法:

Usage:
 pgrep [options] <pattern>

Options:
 -d, --delimiter <string>  指定分隔符
 -l, --list-name           列出PID和进程名称
 -a, --list-full           列出PID和完整命令行
 -v, --inverse             反向匹配,展示不匹配条件的结果
 -w, --lightweight         列出所有TID
 -c, --count               展示匹配的进程个数
 -f, --full                使用完整进程名进行匹配
 -g, --pgroup <PGID,...>   展示匹配的进程组id
 -G, --group <GID,...>     展示匹配的GID
 -n, --newest              展示最近启动的进程
 -o, --oldest              展示启动的进程
 -P, --parent <PPID,...>   只匹配指定PPID的子进程
 -s, --session <SID,...>   匹配SID
 -t, --terminal <tty,...>  匹配tty
 -u, --euid <ID,...>       匹配有效用户id
 -U, --uid <ID,...>        匹配真实id
 -x, --exact               与命令名称完全匹配
 -F, --pidfile <file>      从文件中读取PID
 -L, --logpidfile          如果未锁定PID文件则失败
 --ns <PID>                匹配和PID属于指定namespace的进程
 --nslist <ns,...>         列出指定的namespace的信息。可选那么space:ipc, mnt, net, pid, user, uts

 -h, --help     帮助
 -V, --version  版本

使用:

# 展示命令行为java的进程的进程号
pgrep java

# 查找命令行为java的进程,并列出完整命令行
pgrep -a java

# 查看root用户运行的所有进程
pgrep -U root

# 组合使用
pgrep -a -U root

内存相关

meminfo

作用:查看内存信息

使用:

cat /proc/meminfo

结果解读:

# 总内存
MemTotal:        1009368 kB
# 空闲内存
MemFree:           77320 kB
# 可用内存
MemAvailable:     268716 kB
# Buffer使用的大小
Buffers:               0 kB
# Cache使用的大小
Cached:           329420 kB
# 被高速缓冲存储用的交换空间大小
SwapCached:        18440 kB
# 活跃中的高速缓冲存储器页面文件大小
Active:           493144 kB
# 不活跃的高速缓冲存储器页面文件大小
Inactive:         268208 kB
Active(anon):     245240 kB
Inactive(anon):   237316 kB
Active(file):     247904 kB
Inactive(file):    30892 kB
Unevictable:           0 kB
Mlocked:               0 kB
# 交换区总大小
SwapTotal:       1048572 kB
# 空闲交换区大小
SwapFree:         570568 kB
# 等待被写回到磁盘的大小
Dirty:                52 kB
# 正在被写回的大小
Writeback:             0 kB
# 未映射的页的大小
AnonPages:        421380 kB
# 设备和文件映射的大小
Mapped:            27068 kB
Shmem:             50624 kB
# 内核数据结构缓存的大小,可减少申请和释放内存带来的消耗
Slab:              99168 kB
# 可收回slab的大小
SReclaimable:      50444 kB
# 不可收回的slab的大小
SUnreclaim:        48724 kB
KernelStack:        6992 kB
# 管理内存分页的索引表的大小
PageTables:         7496 kB
# 已经发给NFS服务器,但尚未被确认(committed)写入到稳定存储的页表
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     1553256 kB
Committed_AS:    1597364 kB
# 虚拟内存大小
VmallocTotal:   34359738367 kB
# 已使用的虚拟内存大小
VmallocUsed:       53608 kB
# 在vmalloc区域中可用的最大的连续内存块的大小
VmallocChunk:   34359681024 kB
HardwareCorrupted:     0 kB
AnonHugePages:    229376 kB
# 大页面的分配
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       63424 kB
DirectMap2M:      985088 kB

TIPS

free

作用:查看内存运行情况

语法:

Usage:
 free [options]

Options:
 -b, --bytes         以Byte为单位显示内存使用情况
 -k, --kilo          以KB为单位显示内存使用情况
 -m, --mega          以MB为单位显示内存使用情况
 -g, --giga          以GB为单位显示内存使用情况
     --tera          以TB为单位显示内存使用情况
 -h, --human         自动以合适的单位显示内存使用情况
     --si            以1000为底而非1024
 -l, --lohi          展示最低/最高内存的统计信息
 -t, --total         显示内存总和(RAM + swap)
 -s N, --seconds N   每隔N秒刷新
 -c N, --count N     打印N次后退出
 -w, --wide          宽屏模式打印,将buff和cache分开显示

     --help     帮助
 -V, --version  展示版本

For more details see free(1).

示例:

[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1009368      519640       77092       50732      412636      250392
Swap:       1048572      477968      570604

结果解读:

  • total:物理内存总量
  • used:已使用的内存,used = total - free - buffers - cache
  • free:空闲的内存数
  • shared:多个进程共享的内存
  • buff/cache:代表的是 buff(对应/proc/meminfo里的Buffers)和cache的内存(对应/proc/meminfo 里的Cached and Slab)。
  • available:在CentOS 7中,available是真正可用内存。available包括了buff/cache中一些可以被释放的内存,当物理内存不够用的时候,内核会把非活跃的数据清空。
  • Mem:

TIPS

不同版本的CentOS,free结果不同。可参考:https://www.cnblogs.com/operationhome/p/10362776.html

vmstat

作用:全称Virtual Meomory Statistics(虚拟内存统计),可对操作系统的虚拟内存、进程、IO读写、CPU活动等进行监视

语法:

Usage:
 vmstat [options] [delay [count]]

Options:
 -a, --active           展示active/inactive的内存
 -f, --forks            显示此系统启动以来的forks的总数,包括fork、vfork和clone system calls
 -m, --slabs            展示slabinfo信息
 -n, --one-header       只展示1次header,而非周期展示
 -s, --stats            显示各种事件计数器和内存统计(只显示1次)
 -d, --disk             展示磁盘信息
 -D, --disk-sum         显示磁盘统计数据
 -p, --partition <dev>  展示分区详情
 -S, --unit <char>      控制输出的单位,k(1000字节) K(1024字节) 或 M(1048576字节),默认为K
 -w, --wide             宽屏输出模式
 -t, --timestamp        打印时间戳

 -h, --help     帮助
 -V, --version  版本

For more details see vmstat(8).

使用:

[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0 478632  93272      0 390596    0    0     0     1    0    0  0  0 100  0  0

结果解读:

  • procs

    • r:可运行的进程数(runnable processes),包括了running的进程和等待运行的进程(running or waiting for run time)。如果此值过大,则意味着CPU非常繁忙。如果此参数长期 >= 逻辑CPU个数,则表示CPU可能存在瓶颈,考虑增加CPU
    • 处在非终端睡眠(uninterruptible sleep)状态的进程数。此值表示被阻塞的进程数。主要是指被资源阻塞的进程对列数(比如IO资源、页面调度等)
  • memory

    • swpd:已使用的虚拟内存大小
    • free:空闲内存大小
    • buff:用做buffer的内存大小
    • cache:用来做cache的内存大小
    • inact:inactive的内存总量(-a)
    • active:active的内存总量(-a)
  • swap

    • si:每秒从磁盘交换到内存的大小,单位:KB/秒
    • so:每秒从内存交换到磁盘的大小,单位:KB/秒
    • 当内存够用时,这两个值都是0。如果这两个值长期大于0,则会影响系统性能,磁盘IO和CPU资源都会被消耗。 当看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,是不正确的。不能光看这一点,还要结合si和so。如果free很少,但是si和so也很少(大多时候是0),可以不用担心。此时,系统性能不会受到影响的。
  • io

    • bi:每秒从块存储设备接收到的块数
    • bo:每秒发送到块存储设备的块数
    • 随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大
  • system

    • in:每秒中断数,包括时钟中断
    • cs:每秒上下文切换数
    • 这两个值越小越好
  • cpu

    • us:用户CPU时间(非内核进程占用时间)百分比
    • sy:系统使用的CPU时间百分比
    • id:空闲CPU时间百分比
    • wa:等待IO的CPU时间百分比
    • st:被虚拟机偷去的CPU时间百分比

常见用法:

# 每隔一秒展示一次
vmstat 1

vmstat -a

磁盘相关

df

作用:

展示磁盘使用情况

语法:

Usage: df [OPTION]... [FILE]...

Mandatory arguments to long options are mandatory for short options too.
  -a, --all             包含具有0Blocks的文件系统
  -B, --block-size=SIZE  指定打印单位,可用单位: K, M, G, T, P, E, Z, Y (以1024为底) ;也可用KB, MB, ... (以1000为底)。例如-BM表示以MB为单位打印
      --direct          显示文件的统计信息而不是挂载点
      --total           在末尾产生一个汇总行
  -h, --human-readable  自动以合适的单位显示磁盘使用情况
  -H, --si              以1000为底而非1024
  -i, --inodes          列出inode的信息,而非block的使用信息
  -k                    相当于--block-size=1K
  -l, --local           将列表限制为本地文件系统
      --no-sync         在获取使用情况信息之前不调用同步(默认)
      --output[=FIELD_LIST]  使用FIELD_LIST定义的打印格式,如果省略FIELD_LIST则打印所有字段。FIELD_LIST是一个以逗号分隔的字段列表,可选的字段有:'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'size', 'used', 'avail', 'pcent', 'file','target'      
  -P, --portability     使用POSIX输出格式
      --sync            在获取使用情况信息之前调用同步
  -t, --type=TYPE       将列表限制为TYPE类型的文件系统。
  -T, --print-type      在结果中,多出来一个Type列,其中打印文件系统类型
  -x, --exclude-type=TYPE   将列表限制为非TYPE类型的文件系统
  -v                    (忽略)
      --help     帮助
      --version  显示版本

使用:

df

结果解读:

  • Filesystem:文件系统的名称
  • 1K-blocks:占用多少个1K-block,相当于展示占用了多少Kb的磁盘
  • Used:使用了多少磁盘
  • Avail:可用磁盘
  • Use:使用的百分比
  • Mounted on:挂载点

常见用法:

# 自动以合适的单位显示磁盘使用情况
df -h

# 查看gc.log这个文件所属的文件系统信息
df gc.log

# 指定输出格式
df --output=source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target

拓展阅读:

Linux 深入理解inode/block/superblock

du

作用:

显示目录或文件的大小

语法:

Usage: du [OPTION]... [FILE]...
  or:  du [OPTION]... --files0-from=F

Mandatory arguments to long options are mandatory for short options too.
  -0, --null            以0字节而不是换行符结束每条输出(即:直接输出下一行,不换行)
  -a, --all             显示所有文件大小,不限于目录
      --apparent-size   打印“apparent size”,而非磁盘占用情况
  -B, --block-size=SIZE  指定打印单位,可用单位: K, M, G, T, P, E, Z, Y (以1024为底) ;也可用KB, MB, ... (以1000为底)。例如-BM表示以MB为单位打印
  -b, --bytes           相当于'--apparent-size --block-size = 1'
  -c, --total           在末尾产生一个汇总行
  -D, --dereference-args  取消引用命令行上列出的符号链接
  -d, --max-depth=N     指定要展示的最大深度,--max-depth=0相当于--summarize
      --files0-from=F   总结文件F中指定的NUL终止文件名的磁盘使用情况;如果F为-,则从标准输入中读取名称
  -H                    等价于--dereference-args (-D)
  -h, --human-readable  自动以合适的单位显示磁盘使用情况
      --inodes          列出inode的信息,而非block的使用信息
  -k                    相当于--block-size=1K
  -L, --dereference     取消引用所有符号链接
  -l, --count-links     如果是硬链接,则计数很多次
  -m                    相当于--block-size=1M
  -P, --no-dereference  不遵循任何符号链接(这是默认设置)
  -S, --separate-dirs   不统计子目录的大小
      --si              类似于-h,但以1000为底而非1024
  -s, --summarize       只展示每个参数的统计信息
  -t, --threshold=SIZE  如果SIZE为正,则排除小于SIZE的条目;如果为负,则排除大于SIZE的条目
      --time            展示文件的修改时间
      --time=WORD       在time字段展示WORD字段而非修改时间,WORD取值:atime, access, use, ctime or status
      --time-style=STYLE  指定时间的显示格式,取值:full-iso, long-iso, iso, 或+FORMAT,FORMAT的解释类似于“date”
  -X, --exclude-from=FILE  排除匹配FILE中的正则的文件
      --exclude=PATTERN    排除匹配正则的文件
  -x, --one-file-system    跳过不同文件系统上的目录
      --help     帮助
      --version  版本

常见用法:

# 当前目录及子目录的大小,以及大小汇总
du 

# 展示1.txt文件的大小
du 1.txt

# 自动以合适的单位显示目录的大小
du -h some_dir

# 排除 < 1000m的文件,展示当前目录及子目录的大小,以及大小汇总
du -t 1000m

# 以合适的单位展示指定目录的大小
du -sh some_dir

网络相关

netstat

作用:展示网络状态

语法:

usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}
       netstat [-vWnNcaeol] [<Socket> ...]
       netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]

        -r, --route              展示路由表
        -I, --interfaces=<Iface> 展示网卡Iface的信息
        -i, --interfaces         展示网卡信息列表
        -g, --groups             显示多播组的成员信息
        -s, --statistics         展示网卡网络统计信息
        -M, --masquerade         显示伪装的网络连接(masqueraded connections)

        -v, --verbose            展示更多详情信息
        -W, --wide               不截断IP地址
        -n, --numeric            不解析名称
        --numeric-hosts          不解析主机名
        --numeric-ports          不解析端口
        --numeric-users          不解析
        -N, --symbolic           解析硬件名称
        -e, --extend             展示更多信息
        -p, --programs           为socket展示PID或程序名称
        -o, --timers             在结果中显示Timer列
        -c, --continuous         持续列出结果

        -l, --listening          展示监听的服务器socket
        -a, --all                展示所有的socket(默认connected,指定-a则会展示监听/为监听的socket)
        -F, --fib                展示转发信息库(Forwarding Information Base)(default)
        -C, --cache              展示路由缓存而非FIB
        -Z, --context            为socket展示SELinux安全上下文

  <Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
           {-x|--unix} --ax25 --ipx --netrom
  <AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet
  List of possible address families (which support routing):
    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) 
    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) 
    x25 (CCITT X.25) 

使用:

 netstat
    

结果解读:

使用不同参数,展示的结果不用,详情大家看下 man netstat里面的结果吧

常见用法:

# 查看全部的socket
netstat -a

# 查看使用tcp协议的网络信息
netstat -t

# 查看使用udp协议的网络信息
netstat -u

# 展示所有所有状态的tcp监听,并打印程序名称
netstat -antp

route

作用:显示和操作路由表

语法:

Usage: route [-nNvee] [-FC] [<AF>]           列出内核路由表
       route [-v] [-FC] {add|del|flush} ...  Modify routing table for AF.

       route {-h|--help} [<AF>]              修改AF的路由表
       route {-V|--version}                  展示版本

        -v, --verbose            展示更多详情信息
        -n, --numeric            不解析名称
        -e, --extend             展示更多信息
        -F, --fib                展示转发信息库(Forwarding Information Base)(default)
        -C, --cache              展示路由缓存而非FIB

  <AF>=Use -4, -6, '-A <af>' or '--<af>'; default: inet
  List of possible address families (which support routing):
    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) 
    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) 
    x25 (CCITT X.25) 

使用: 详见 https://blog.csdn.net/u011857683/article/details/83795435 里面有非常详细的描述

lsof

作用:列出当前系统当前打开的文件

语法:

 usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.
  -?|-h list help          -a AND selections (OR)     -b avoid kernel blocks
  -c c  cmd c ^c /c/[bix]  +c w  COMMAND width (9)    +d s  dir s files
  -d s  select by FD set   +D D  dir D tree *SLOW?*   +|-e s  exempt s *RISKY*
  -i select IPv[46] files  -K list tasKs (threads)    -l list UID numbers
  -n no host names         -N select NFS files        -o list file offset
  -O no overhead *RISKY*   -P no port names           -R list paRent PID
  -s list file size        -t terse listing           -T disable TCP/TPI info
  -U select Unix socket    -v list version info       -V verbose search
  +|-w  Warnings (+)       -X skip TCP&UDP* files     -Z Z  context [Z]
  -- end option scan     
  +f|-f  +filesystem or -file names     +|-f[gG] flaGs 
  -F [f] select fields; -F? for help  
  +|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)
                                        +m [m] use|create mount supplement
  +|-M   portMap registration (-)       -o o   o 0t offset digits (8)
  -p s   exclude(^)|select PIDs         -S [t] t second stat timeout (15)
  -T qs TCP/TPI Q,St (s) info
  -g [s] exclude(^)|select and print process group IDs
  -i i   select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
  +|-r [t[m<fmt>]] repeat every t seconds (15);  + until no files, - forever.
       An optional suffix to t is m<fmt>; m must separate t from <fmt> and
      <fmt> is an strftime(3) format for the marker line.
  -s p:s  exclude(^)|select protocol (p = TCP|UDP) states by name(s).
  -u s   exclude(^)|select login|UID set s
  -x [fl] cross over +d|+D File systems or symbolic Links
  names  select named files or files on named file systems
Anyone can list all files; /dev warnings disabled; kernel ID check disabled.

常见用法:

# 列出所有打开的文件
lsof

# 查看哪些进程正在使用1.txt
lsof 1.txt

# 递归查看test_dir目录及其文件的信息
lsof +D test_dir

# 查看java进程打开的文件
lsof -c mysql

# 查看java或mysql打开的文件
lsof -c java -c mysql

# 列出所有的网络连接
lsof -i

# 列出所有tcp连接
lsof -i tcp

# 列出所有udp连接
lsof -i udp

# 列出谁在使用8080端口
lsof -i:8080

# 列出谁在用tcp协议使用8080端口
lsof -i tcp:8080

Linux调优其他命令

sysstat 多合一的监控套件

详细文档:www.linuxidc.com

  • iostat: 监控io相关的信息
  • mpstat : 监控CPU相关的信息
  • pidstat : 监控进程

xxxtop

详细文档:https://www.cnblogs.com/xuanbjut/p/11531394.html

  • htop: 增强版的top命令
  • iotop: 查看io相关的情况
  • iftop: 监控系统的流量和带宽