文章目录
Linux nice 和 renice命令:改变进程优先级
当Linux内核尝试决定哪些进程可以访问CPU时,其中一个需要考虑的因素就是进程优先级的值。每个进程都有一个介于
−
20
-20
−20到
19
19
19之间的nice
值。默认情况下,进程nice值为0。
进程的nice
值,可以通过nice
命令和renice
命令修改,进而调整进程的运行顺序。
在Linux系统中,表示进程优先级有两个参数,PRI
和NI
。
kkk@kkk-ThinkPad-P52:~$ ps -le
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 46300 - ? 00:00:01 systemd
1 S 0 2 0 0 80 0 - 0 - ? 00:00:00 kthreadd
1 I 0 4 2 0 60 -20 - 0 - ? 00:00:00 kworker/0:0H
1 I 0 5 2 0 80 0 - 0 - ? 00:00:00 kworker/u24:0
1 I 0 6 2 0 60 -20 - 0 - ? 00:00:00 mm_percpu_wq
1 S 0 7 2 0 80 0 - 0 - ? 00:00:00 ksoftirqd/0
1 I 0 8 2 0 80 0 - 0 - ? 00:00:01 rcu_sched
这两个值都表示优先级,数值越小代表该进程优先级越高。PRI
是由内核动态调整的,用户不能直接修改。所以我们只能通过修改NI
的值来影响PRI
的值,间接的调整进程优先级。
PRI
和NI
的关系如下:
P
R
I
(
最
终
值
)
=
P
R
I
(
原
始
值
)
+
N
I
PRI(最终值) = PRI(原始值) + NI
PRI(最终值)=PRI(原始值)+NI
修改NI
值就可以改变进程的优先级。NI
值越小,进程的PRI
就会降低,该进程就越优先被CPU处理;反之,NI
值越大,进程的PRI
就会在呢国家,进程的优先级越低。
修改NI
值时有几个注意事项。
NI
的范围是-20~19- 普通用户调整
NI
值的范围是0~19,而且只能调整自己的进程。 - 普通用户调高
NI
值,而不能降低。 - 只有
root
用户才能设定NI
值为负值,而且可以调整任何用户的进程。
nice 命令
nice
命令可以给要启动的进程赋予NI值,但是不能修改已运行进程的NI值。
nice
命令格式如下:
kkk@kkk-ThinkPad-P52:~$ nice [-n NI值] 命令
-n NI值
:给命令赋予NI值,该值的范围是
−
20
−
19
-20-19
−20−19。
renice命令
renice
可以在进程运行时修改其NI
值,从而调整优先级。
renice
命令格式如下
kkk@kkk-ThinkPad-P52:~$ renice [优先级] PID
注意,此命令中使用的是进程的PID号。
Linux w 和 who命令:查看登陆用户信息
Linux中,使用w
或who
命令都可以查看服务器上目前已登陆的用户信息,两者的区别在于,w
命令除了能知道目前已登陆的用户信息,还可以知道每个用户执行任务的情况。
w
命令的基本格式如下:
kkk@kkk-ThinkPad-P52:~$ w [选项][用户名]
选项 | 含义 |
---|---|
-h | 不显示输出信息的标题 |
-s | 用短格式输出,不显示登陆时间 |
-V | 显示版本信息 |
显示当前登陆信息
kkk@kkk-ThinkPad-P52:~$ w
17:07:12 up 1:37, 1 user, load average: 0.93, 0.74, 0.57
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
kkk tty7 :0 15:30 1:36m 2:57 0.11s /sbin/upstart -
上面第一行的输出信息中,第一行其实和top
命令的第一行非常类似,主要显示了当前的系统时间,系统从启动至今已经运行的时间,登陆到系统中的用户数和系统平均负载。
平均负载是指在1分钟,5分钟,15分钟内系统的负载状况。
从第二行开始,显示的是当前所有登陆系统的用户信息,第二行是用户信息的的各列标题,从第三行开始每行代表一个用户。这些标题的含义如下标所示。
标题 | 含义 |
---|---|
USER | 登陆到系统的用户。 |
TTY | 登陆终端。 |
FROM | 表示用户从哪里登陆进来,一般显示远程登陆主机的IP地址或者主机名。 |
LOGIN@ | 用户登陆的日期和时间。 |
IDLE | 表示某个程序上次从终端开始执行到现在所持续的时间。 |
JCPU | 和该终端连接的所有进程占用的CPU运算时间。 |
PCPU | 当前进程所占用的CPU运算时间。 |
WHAT | 当前用户正在执行的进程名称和选项,换句话说,就是表示用户当前执行的是什么命令。 |
相比较w
命令,who
命令只能显示当前登陆的用户信息,但无法知道每个用户正在执行的命令。
who
命令的基本格式如下:
kkk@kkk-ThinkPad-P52:~$ who [选项][file]
who
命令默认是通过/var/run/utmp
文件来获取登陆用户信息,但如果通过file
指定另一个文件,则who
命令将不在默认读取/var/run/utmp
文件,而是读取该指定文件里获取信息。
有关who
命令常用选项及含义,如下表所示。
选项 | 含义 |
---|---|
-a | 列出所有信息,相当于所有选项 |
-d | 打印出死亡进程 |
-H | 打印出表头 |
-l | 打印出系统登陆的进程 |
-q | 打印出登入的用户名和用户数 |
kkk@kkk-ThinkPad-P52:~$ who -s
kkk tty7 2021-06-07 02:58 (:0)
Linux free命令:查看内存使用状态
free
命令用来显示系统内存状态,包括系统物理内存,虚拟内存(swap交换分区),共享内存和系统缓存的使用情况。
free
命令的基本格式如下:
kkk@kkk-ThinkPad-P52:~$ free [选项]
下表列出了此命令常用的选项以及各自的含义。
选项 | 含义 |
---|---|
-b | 以Byte(字节)为单位,显示内存使用情况 |
-k | 以KB为单位,显示内存使用情况 |
-m | 以MB为单位,显示内存使用情况 |
-g | 以GB为单位,显示内存使用情况 |
-s 间隔秒数 | 根据指定的间隔时间,持续显示内存使用情况 |
例如
kkk@kkk-ThinkPad-P52:~$ free -m
total used free shared buff/cache available
Mem: 31818 1389 28451 332 1977 29616
Swap: 9765 0 9765
第一行显示的是各个列的列表头信息,各自的含义如下所示:
- total是总内存数;
- used是已经使用的内存数;
- free是空闲的内存数;
- shared是多个进程共享的内存总数;
- buff是缓冲内存数;
- cache是缓存内存数;
Mem一行指的是内存的使用情况;Swap一行指的就是swap分区的使用情况。
Linux vmstat命令:监控系统资源
如果你想动态的了解一下系统的使用状态,以及查看当前系统中到底是哪个环节最占用系统资源,就可以使用vmstat
命令。
vmstat
命令,是virtual memory statistics
(虚拟内存统计)的缩写,可用来监控CPU使用,进程状态,内存使用,虚拟内存使用,硬盘输入/输出状态等信息。此命令的基本格式有如下2种。
kkk@kkk-ThinkPad-P52:~$ vmstat [-a][刷新延时 刷新次数]
kkk@kkk-ThinkPad-P52:~$ vmstat [选项]
-a
的含义是用inact/active
(活跃与否)来取代buff/cache
来buff/cache
的内存输出信息。除此之外,下表罗列出了vmstat
命令的第二种基本格式中常用的选项及各自的含义。
选项 | 含义 |
---|---|
-S 单位 | 令输出的数据显示单位 |
-d | 列出硬盘有关读写总量的统计表 |
-p 分区设备文件名 | 查看硬盘分区的读写情况 |
-V | 输出该命令的版本信息 |
-n 秒数 | 周期性的显示信息 |
输出信息中,各个字段的含义。
kkk@kkk-ThinkPad-P52:~$ vmstat -n 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 29392460 95444 1759756 0 0 84 29 81 374 2 1 96 1 0
0 0 0 29392212 95452 1759700 0 0 0 9 217 1017 0 0 99 0 0
0 0 0 29392336 95452 1759624 0 0 3 9 257 1101 0 0 99 0 0
0 0 0 29338364 95452 1811120 0 0 0 1 774 6056 2 1 97 0 0
2 0 0 29376076 95460 1772536 0 0 0 11 911 5177 3 1 96 0 0
字段 | 含义 |
---|---|
procs | 进程信息字段:-r :等待的进程数,数量越大,系统越繁忙-b :不可被唤醒的进程数量,数量越大,系统越繁忙 |
memory | 内存信息字段:-swpd :虚拟内存的使用情况,单位为KB-free :空闲的内存容量量,单位为KB-buff :缓冲的内存容量,单位为KB-cache :缓存的内存容量,单位为KB |
swap | 交换分区信息字段-si :从磁盘交换到内存的交换页数量,单位:KB/秒-so :从内存交换到磁盘的交换页数量,单位:KB/秒 |
io | bi :发送到块设备的块数,单位:块/秒bo :从块设备接受到的块数,单位:块/秒 |
system | -in :每秒被中断进程次数-cs :每秒进行的事件切换次数 |
cpu | -us :非内核进程消耗CPU运算时间的百分比-sy :内核进程消耗CPU运算时间的百分比-id :空闲CPU的百分比-wa :等待I/O所消耗的CPU百分比-st :被虚拟机所盗用的CPU百分比 |