top
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器
top - 17:31:22 up 56 days, 59 min, 1 user, load average: 0.00, 0.00, 0.00
Tasks: 103 total, 1 running, 102 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.2 id, 0.0 wa, 0.2 hi, 0.0 si, 0.0 st
MiB Mem : 3736.7 total, 208.5 free, 189.4 used, 3338.8 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 3278.0 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 185084 11684 8900 S 0.0 0.3 39:14.19 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.92 kthreadd
10 root 20 0 0 0 0 S 0.0 0.0 2:42.08 ksoftirqd/0
11 root 20 0 0 0 0 I 0.0 0.0 9:38.83 rcu_sched
12 root rt 0 0 0 0 S 0.0 0.0 0:15.42 migration/0
13 root rt 0 0 0 0 S 0.0 0.0 0:00.75 watchdog/0
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1
16 root rt 0 0 0 0 S 0.0 0.0 0:03.25 watchdog/1
17 root rt 0 0 0 0 S 0.0 0.0 0:16.47 migration/1
18 root 20 0 0 0 0 S 0.0 0.0 2:39.65 ksoftirqd/1
- us:用户进程占用cpu百分率
- sy:系统占用cpu百分率
- ni:用户进程空间内改变过优先级的进程占用CPU百分比
- id:cpu空闲率
- wa:等待IO的CPU时间百分比
- hi:硬中断(Hardware IRQ)占用CPU的百分比
- si:软中断(Software Interrupts)占用CPU的百分比
- st:虚拟机占用百分比
- PR:进程优先级
- NI:nice值,值越小优先级越高,值范围-20~19
- VIRT:进程虚拟内存的大小,只要是进程申请过的内存,即便还没有真正分配物理内存,也会计算在内。
- RES:常驻内存的大小,也就是进程实际使用的物理内存大小,但不包括 Swap 和共享内存。
- SHR:共享内存的大小,比如与其他进程共同使用的共享内存、加载的动态链接库以及程序的代码段等。
- S:进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
- %MEM 是进程使用物理内存占系统总内存的百分比
系统平均负载(load average)
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系
所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程
平均负载最理想的情况是等于 CPU 个数
依次则是过去 1 分钟、5 分钟、15 分钟的平均负载,三个不同时间间隔的平均值,其实给我们提供了,分析系统负载趋势的数据来源,让我们能更全面、更立体地理解目前的负载状况
平均负载的含义上来,平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如:CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高
分析工具
stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景,sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们的案例会用到这个包的两个命令 mpstat 和 pidstat。mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标
CPU上下文切换
vmstat
常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数
# 每隔5秒输出1组数据
[lighthouse@VM-4-5-centos ~]$ vmstat 5
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 0 196804 82564 3353000 0 0 0 15 1 2 0 0 99 0 0
0 0 0 197120 82564 3353008 0 0 0 4 196 301 0 0 99 0 0
0 0 0 196028 82564 3353088 0 0 0 44 318 488 2 2 95 0 0
- cs(context switch)是每秒上下文切换的次数。
- in(interrupt)则是每秒中断的次数。
- r(Running or Runnable)是就绪队列的长度,也就是正在运行和等待 CPU 的进程数。
- b(Blocked)则是处于不可中断睡眠状态的进程数。
pidstat
常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标
# 每隔5秒输出1组数据
$ pidstat -w 5
Linux 4.15.0 (ubuntu) 09/23/18 _x86_64_ (2 CPU)
08:18:26 UID PID cswch/s nvcswch/s Command
08:18:31 0 1 0.20 0.00 systemd
08:18:31 0 8 5.40 0.00 rcu_sched
...
- cswch ,表示每秒自愿上下文切换(voluntary context switches)的次数(自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换)
- nvcswch ,表示每秒非自愿上下文切换(non voluntary context switches)的次数(非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换)
僵尸进程
free
查看内存使用情况,与top输出中内存使用相关列含义一致,可以使用man命令查看列含义
[lighthouse@VM-4-5-centos ~]$ free -m
total used free shared buff/cache available
Mem: 3736 190 207 1 3338 3277
Swap: 0 0 0
- total 是总内存大小;
- used 是已使用内存的大小,包含了共享内存;
- free 是未使用内存的大小;
- shared 是共享内存的大小;
- buff/cache 是缓存和缓冲区的大小;
- available 是新进程可用内存的大小(不仅包含未使用内存,还包括了可回收的缓存,所以一般会比未使用内存更大。不过,并不是所有缓存都可以回收,因为有些缓存可能正在使用中)
buff/cache
buffers/cached使用情况可以从proc文件系统查看
ubuntu@VM-4-5-ubuntu:~$ cat /proc/meminfo
MemTotal: 3875264 kB
MemFree: 1799068 kB
MemAvailable: 3363268 kB
Buffers: 143444 kB
Cached: 1570216 kB
使用man查看free命令输出中buff/cache列含义
buffers
Memory used by kernel buffers (Buffers in /proc/meminfo)
cache Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)
buff/cache
Sum of buffers and cache
- Buffers 是内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值。
- Cache 是内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和
/proc 是 Linux 内核提供的一种特殊文件系统,是用户跟内核交互的接口。比方说,用户可以从 /proc 中查询内核的运行状态和配置选项,查询进程的运行状态、统计数据等,当然,你也可以通过 /proc 来修改内核的配置。proc 文件系统同时也是很多性能工具的最终数据来源。比如我们刚才看到的 free ,就是通过读取/proc/meminfo,得到内存的使用情况。继续说回/proc/meminfo,既然 Buffers、Cached、SReclaimable 这几个指标不容易理解,那我们还得继续查 proc 文件系统,获取它们的详细定义。执行 man proc,你就可以得到 proc 文件系统的详细文档。
Buffers %lu
Relatively temporary storage for raw disk blocks that shouldn't get tremendously large (20MB or so).
Cached %lu
In-memory cache for files read from the disk (the page cache). Doesn't include SwapCached.
...
SReclaimable %lu (since Linux 2.6.19)
Part of Slab, that might be reclaimed, such as caches.
SUnreclaim %lu (since Linux 2.6.19)
Part of Slab, that cannot be reclaimed on memory pressure.
- 通过这个文档,我们可以看到:Buffers 是对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会特别大(20MB 左右)。这样,内核就可以把分散的写集中起来,统一优化磁盘的写入,比如可以把多次小的写合并成单次大的写等等。
- Cached 是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访问这些文件数据时,就可以直接从内存中快速获取,而不需要再次访问缓慢的磁盘。
- SReclaimable 是 Slab 的一部分。Slab 包括两部分,其中的可回收部分,用 SReclaimable 记录;而不可回收部分,用 SUnreclaim 记录。
文件磁盘
mount -- 挂载设备
umount -- 卸载设备
showmount -- 查看挂载设备信息
df [-h] -- 查看已挂载磁盘使用情况
du -- 显示当前目录下所有文件或者目录的磁盘使用情况
fdisk
w, who, whoami
su
iptables
service, chkconfig
type --显示指定命令的类型,判断给出的指令是内部指令还是外部指令
* 环境变量相关
set -- 显示环境变量
printenv -- 查看全局环境变量
echo ${name} -- 输出单个环境变量值
export {name} -- 将局部环境变量转化为全局环境变量
unset {name} -- 删除环境变量
-- 系统变量文件
/etc/profile -- bash shell 的主启动文件,只要登录了linux系统,bash就会执行此文件中的命令
-- 查看系统总句柄数
cat /proc/sys/fs/file-nr
--查看当前应用打开的文件句柄数
ls -l /proc/<pid>/fd | wc -l
-- 管道命令
cut, grep
sort, wc, uniq
-- 执行任务
at
crontab
文件权限
umask --- 设置用户创建文件和目录的默认权限
tough {filename} --- 分配该文件默认权限
chown {owner} {filename/dir} --- 修改文件或者目录默认属主
chgrp {group} {filename/dir} --- 修改文件或者目录默认属组(共享文件)
chmod ---修改文件或者目录权限
/etc/password --- 用户账户相关信息
/etc/group --- 系统包含的组信息
chattr,lsattr,file
目录的相关操作
cd, pwd
mkdir, rmdir
cp, rm, mv
-- 压缩与解压
tar -zxvf jdk-8u66-linux-x64.tar.gz
参数说明:
-z:gzip属性压缩包
-x:解压
-v:显示所有过程
-f: 压缩包名(最后一个参数)
untar
zip, unzip
-- 硬链接和软链接
ln
-- 查看文件
cat
more
less
head -- 显示文件开头部分内容
tail -10 /etc/passwd -- 显示文件末尾后10行内容
tail -f /var/log/messages --实时查看更新的日志
tac -- 将文件以行为单位的反序输出,即第一行最后显示,最后一行先显示。
-- 管道和文本
|
cut, grep, egrep
find /home -name "*.txt" -- 在home目录查找以.txt结尾的文件
find /(查找范围) -name "查找关键字" -type d
grep -v '^$' /etc/profile | wc -l -- 统计文件空行数
sed 's/^$/###/g' test.txt
crontab定时任务
新增调度任务方法:
1.在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出,该命令生成的定时任务保存在(/var/spool/cron下的文件)
2.直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。
crontab -e配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务
查看调度任务
crontab -l --列出当前的所有调度任务
crontab -l -u username --列出用户的所有调度任务
crontab -r --删除所有任务调度工作
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。