Linux进程与内存管理优化

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 粉丝
0 条评论
推荐阅读
Linux I/O性能分析
Linux文件系统为每个文件都分配两个数据结构,索引节点(index node)和目录项(directory entry),它们主要用来记录文件的元信息和目录结构

粥于于2阅读 1.1k

工具篇:iTerm与Zsh
iTerm2支持许多的主题配色,可以自己定义,也可以参考网上现成的主题配色。我个人比较喜欢draculatheme配色。支持item,vim,phpstorm , 下方存在主题官网路径,按照教程安装即可。

super白4阅读 4.7k

深入剖析容器网络和 iptables
Docker 能为我们提供很强大和灵活的网络能力,很大程度上要归功于与 iptables 的结合。在使用时,你可能没有太关注到 iptables 的作用,这是因为 Docker 已经帮我们自动完成了相关的配置。

张晋涛3阅读 1.3k

封面图
麒麟操作系统 (kylinos) 从入门到精通 - 常用软件安装 - 第三篇 常用软件安装(windows下的习惯)
本篇内容大部分从应用商店进行安装,部分通过官网下载,少部分通过命令行安装。1.原生应用1.1钉钉1.2飞书1.3 蓝信1.4 腾讯文档1.5 金山文档1.6 搜狗输入法(拼音)1.7 五笔输入法1.8 libreoffice官方也带了WPS,...

码上世界3阅读 7.5k评论 17

封面图
Metasploit实现木马生成、捆绑及免杀
在一次渗透测试的过程中,避免不了使用到社会工程学的方式来诱骗对方运行我们的木马或者点击我们准备好的恶意链接。木马的捆绑在社会工程学中是我们经常使用的手段,而为了躲避杀毒软件的查杀,我们又不得不对木...

白风之下1阅读 9k

麒麟操作系统 (kylinos) 从入门到精通 - 办公环境 - 第十三篇 字体安装与windows字体的利用
正常情况下,系统下的wps或libreoffice用到的字体都已默认安装。但有时候一些ttf字体或者microsoft office下一些字体需要安装。我们可以在安装好office、acrobat之后,将C:\windows\Fonts文件夹中的字体(我是win...

码上世界2阅读 3.9k

封面图
麒麟操作系统 (kylinos) 从入门到精通 - 影音娱乐- 第三十篇 利用PKS观看电视台(IPTV)直播
类别:笔记本型号:中国长城 UF712硬件平台:飞腾处理器(ArmV8 指令集)系统:银河麒麟操作系统 V10 SP1(2203) 关键词:信创,麒麟系统,linux,PKS,银河麒麟,飞腾,arm64,arm,湖南卫视,中央电视台,电视直播,iptv

码上世界1阅读 3.9k

封面图

代码搬运工

9 声望
1 粉丝
宣传栏