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 --删除所有任务调度工作 

粥于于
9 声望1 粉丝

代码搬运工


« 上一篇
JDK线程池
下一篇 »
InnoDB MVCC机制