Linux基础之系统资源监控与任务管理
一、系统资源监控
监控系统资源有以下几个命令:
free:观察内存(memory)使用情况。
uname:查阅系统与核心相关信息。
uptime:观察系统启动时间与工作负载。
netstat:网络监控。
vmstat:侦测系统资源变化,CPU/内存/磁盘输入输出状态。
1、free内存
free:观察内存使用情况。
[root@localhost ~]# free [-b|-k|-m|-g] [-t]
1.选项与参数
-b:直接输入free时,显示的单位是bytes,我们可以使用b(bytes)、m(Mbytes)、k(Kbytes) 及g(Gbytes)来定义显示单位。部分云主机供应商可能会优化出一个-h的选项,与ls -h显示的方式一样。但系统原本是不提供这样显示的方式。
-t:在输出的最终结果时,显示物理内存与swap的总量。
2.显示选项释义
显示目前系统的内存容量:
[root@localhost ~]# free
total used free shared buffers cached
Mem: 1012352 318528 693824 0 23592 113208
-/+ buffers/cache: 181728 830624
Swap: 2031608 0 2031608
Mem一行显示的是物理内存的量;Swap显示的是虚拟内存的量。
total是总量、used是已被使用的量、free则是剩余可用的量、shared共享内存、buffers将写磁盘的内容、cached已写磁盘或者已从磁盘读出的内容。
2、uname系统核心
uname:查阅系统与核心相关信息。
uname [-asrmpi]
1.选项与参数
-a:所有系统相关的信息,包括以下的数据都会被列出来。
-s:系统内核名称。
-r:内核版本。
-p:CPU的类型,与-m类似,是显示的是CPU的类型。
-m:本系统的硬件名称,例如i686或x86_64等。
-i:硬件的平台(ix86)。
简单记忆方法:
uname as rpm -ivh
所有系统内核版本cpu系统硬件平台安装软件。
输出系统的基本信息:
[root@localhost ~]# uname -a
Linux localhost 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
3、uptime系统负载
uptime:观察系统启动时间与工作负载。
[root@localhost ~]# uptime
08:05:08 up 3:10, 2 users, load average: 0.00, 0.00, 0.00
显示目前系统当前时间、已经开机多长的时间、用户数、以及1、5、15分钟的平均负载。
4、netstat网络监控
netstat:网络(network)监控。
1.命令格式
netstat -[atunlp]
2.选项与参数
-a:将目前系统上所有的已经连接、监听、Socket数据都列出来。
-t:列出tcp网络包的信息。
-u:列出udp网络包的信息。
-n:以端口(port number)方式来显示(不以程序的服务名称)。
-l:列出目前正在监听(listen)的服务。
-p:列出该网络服务的进程id(PID)。
3.netstat常用的命令
[root@localhost ~]# netstat -atp #所有tcp协议的链接,并输出pid号
[root@localhost ~]# netstat -antp
[root@localhost ~]# netstat -lntp
4.显示选项释义
Proto:网络的封包协议,主要分为TCP与UDP封包。
Recv-Q:接收消息缓存区,远端进程发送而来,尚未被当前进程处理 的信息数,单位:字节。
Send-Q:发送消息缓存区,向远端进程发送,尚未被其接收的消息数,单位:字节。
Local Address:本地地址:端口号。
Foreign Address:与当前本端网络地址(IP:port)程进行行通信的远程进程的网络地址(IP:port)(远程通信主机)。
State:网络连接状态,主要有建立(ESTABLISED)及监听(LISTEN)。
PID/Program name:显示此服务的PID号码以及程序的命令名称。
目前系统上已在监听的网络链接以及PID:
[root@localhost ~]# netstat -lntp |head -n 10
5.防火墙
防火墙的启动、状态查看、关闭!!(建议个人学习研究时关闭)
# service iptables start
# service iptables status
# service iptables stop
# service iptables restart
以上状态的修改,在服务器重启前生效。
#永久关闭:
chkconfig iptables off
#永久开启:
chkconfig iptables on
在服务状态并没有发生改变。服务器重启后生效,防火墙会恢复到服务器重启之前的状态。
5、vmstat系统资源
vmstat:侦测系统资源变化(必须记住)。
动态的了解一下系统资源的运作,CPU/内存/磁盘输入输出状态。
1.选项与参数
-a:使用inactive/active(活跃与否)取代buffer/cache的内存输出信息。
-f:开机到目前为止,系统复制(fork)的进程数。
-s:将一些事件(开机至目前为止)导致的内存变化情况列表说明。
-S:后面可以接单位,让显示的数据有单位。例如以K、M展示的形式取代bytes展示。
-d:列出磁盘的读写总量统计表。
-p: 后面列出磁盘分区,可显示该磁盘分区的读写总量统计。
2.显示选项释义
统计目前主机CPU状态,每秒一次,共计四次:
[root@localhost ~]# vmstat 1 4
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 690740 25596 113444 0 0 4 1 15 20 0 0 100 0 0
0 0 0 690716 25596 113472 0 0 0 0 36 41 0 0 100 0 0
0 0 0 690716 25596 113472 0 0 0 0 27 35 0 0 100 0 0
0 0 0 690716 25596 113472 0 0 0 0 32 41 0 0 100 0 0
procs(进程字段)
r:等待运行的进程数量。
b:不可被唤醒的进程数量。
这两个项目越多,代表系统越忙碌(因为系统太忙,所以很多进程就无法被执行或一直在等待而无法被唤醒)。
memory(内存字段)
swpd:虚拟内存被使用的容量。
free:未被使用的内存容量。
buff/cache:用于缓冲的内存。
swap(交换分区字段)
重点记忆下si和so。
si:每秒从交换分区写到内存的数据量大小,由磁盘->内存。以内存为参照物。
so:每秒写入交换分区的内存数据量大小,由内存->磁盘。
如果si/so的数值太大,表示内存内的数据常常得在磁盘与主存储器之间传来传去,系统效能会很差。
io(磁盘读写字段)
bi:从块设备读入数据的总量(读磁盘)(每秒kb)。
bo:块设备写入数据的总量(写磁盘)(每秒kb)。
如果这部份的值越高,代表系统的I/O非常忙碌。
system(系统字段 )
in:每秒被中断的进程次数。
cs:每秒钟进行的事件切换次数。
这两个数值越大,代表系统与接口设备的通信非常频繁。
CPU(cpu字段)
us:(user)非内核态的(用户进程)CPU使用情况。
sy:(system)内核态所使用(系统进程)的CPU情况。
id:(idle)闲置的CPU情况。
wa:(wait)等待I/O所耗费的CPU。
st:被虚拟机(virtual machine)所盗用的CPU(2.6.11 以后才支持)。
二、任务管理
登录bash之后,就会取得一个名为bash的进程(它有自己的PID)了。在这个环境中所执行的其他指令,几乎都是所谓的子进程。
在一个会话终端上:
[root@localhost ~]# ls
… install.log …
[root@localhost ~]# tail –F install.log #启动一个进程(用来跟踪日志文件)
在另外一个会话终端上(连接同一台虚拟机):
[root@localhost ~]# pstree –Aup
|-sshd(2928)-+-sshd(3332)---bash(3336)---tail(3460)
| `-sshd(3440)---bash(3444)---pstree(3498)
在Windows中我们经常会执行多个任务,例如打开qq和音乐。那么在经过几天的学习后,我们发现Linux的命令行窗口只能做一个任务,比如我们用vim编辑1.txt的时候无法去编辑2.txt (假设说存在)。但我们又需要执行这么一个操作的时候怎么办?Linux能不能让某一个程序在执行的时候在后台运行呢?
1、概念
1.前台
可以控制与执行命令的bash环境称为前台进程。
2.后台
在操作系统中自行运行,你无法使用[ctrl]+c终止,可使用bg/fg命令操作的任务,可以通过jobs命令查看后台执行的任务(非系统进程)。
可以通过Ctrl+z将前台执行的任务放置后台(放置到后台,会暂停该任务)。
2、多任务执行
在当前bash执行多个任务,任务后面添加&符号即可将任务放置后台执行。
命令样式:cp file1 file2 &
重点在以上的这个“&”符号,他表示将file1这个文件复制为file2,同时将这个拷贝进程放到后台执行。也就是说执行这一个命令之后,在这一个终端仍然可以做其他的工作。拷贝任务执行完成后,系统将会在终端显示完成的消息。
举例来说,我们在登录bash后,想要一边复制文件、一边进行编译。那么就需要任务管理。
Ctrl+z和&有什么区别:
Ctrl+z 将前台程序放置后台——状态为暂停。
在执行的命令后面追加“&”——状态为后台运行。
Vim编辑不管用那个方式转到后台,都是暂停状态。
在同一个会话终端上:
[root@localhost ~]# tail -F install.log & #启动一个后台进程
[1] 3517 #返回该后台进程的PID
[root@tedu ~]# pstree –Aup
|-sshd(2928)-+-sshd(3332)---bash(3336)-+-pstree(3518)
| `-tail(3517)
| `-sshd(3440)---bash(3444) #另外一个终端进程
[root@localhost ~]# ps ax | grep tail
3517 pts/0 S 0:00 tail -f install.log
3523 pts/0 S+ 0:00 grep tail
[root@localhost ~]#kill 3517
[root@localhost ~]# (敲回车)
[1]+ Terminated tail -f install.log
直接将命令放到后台执行&,在叧有一个 bash 的环境下,如果想要同时进行多个工作,那么可以将某些工作接放到后台,用户可以继续操作前台任务。
举例:
将/etc/备份为/tmp/etc.tar.gz且不想要等待其完成。
[root@localhost ~]# tar -czPf /tmp/etc.tar.gz /etc & (将/etc目录压缩到/tmp/下命名为etc.tar.gz)
[1] 3581
当job执行完成之后会显示Done(敲回车)。
[root@localhost ~]#
[1]+ Done tar -czPf /tmp/lib.tar.gz /etc
其中中括号为job number。
将目前的工作丢到后台暂停:[ctrl]+z。
[root@localhost ~]# vim anaconda-ks.cfg #ctrl+z
[1]+ Stopped vim anaconda-ks.cfg
说明:
在vim的一般模式下,按下[ctrl]+z,屏幕上会出现[1],表示这是第一个任务。+代表最近一个被放到后台的任务,且目前在后台预期会被取用的任务(调用切换到前台命令时会第一个被调用到)。
Stopped使用[ctrl]+z放到后台的任务都是暂停状态 。
[root@localhost ~]# vim install.log #ctrl+z
[2]+ Stopped vim install.log
[root@tedu ~]# pstree –Aup
3、jobs
观察后台任务。jobs查看当前工作状态。
1.选项与参数
-l:除了列出job number与指令串之外,同时列出PID的号码。
-r:仅列出正在后台run的任务。
-s:仅列出正在后台暂停(stop)的任务。
演示:
[root@localhost ~]# jobs #显示全部后台进程(不含PID)
[root@localhost ~]# jobs –l#显示全部后台进程(含PID)
[root@localhost ~]# jobs –r
[root@localhost ~]# jobs -s
2.fg
将后台拿到前台执行:fg(ForeGround)。
命令格式:fg %jobnumber
job number为任务号码(数字);%可有可无。
示例:
fg 1
将任务号为1的进程调到前台执行。
[root@localhost ~]# jobs
[1]+ Stopped vim anaconda-ks.cfg
[2]- Stopped vim install.log
+作用“表示当前的”,如果命令fg后面没有跟任务号,默认将带+的进程调到前台执行。-表示+号对应的进程被调前台后,“-”对应的进程立即变为“+”。
3.bg
让任务在后台中变成执行状态:bg。针对vim可以改变其前台调用的优先级。
bg 2执行后台进程中任务号为2的进程。
[root@localhost ~]#bg 2
[2]- vim install.log &
[root@localhost ~]# jobs -l
[1]+ Stopped vim anaconda-ks.cfg
[2]- Stopped (tty output) vim install.log
发现任务号2仍然是Stopped的,原因是vim没有前端(tty output),所以无法在后台running,但此时如果执行fg的话会优先打开2(vim install)。
[root@localhost ~]# tail -f test &
[root@localhost ~]# jobs
[4]+ Stopped tail -f test&
[root@localhost ~]#bg 4 #jobs: [4] Running tail -f test &
4.终止job
终止job只能使用kill命令,来将进程杀掉。
[root@localhost ~]#jobs -l
[2]- 3716 Stopped (tty output) vim install.log
[3]+ 3775 Stopped vim anaconda-ks.cfg
[4] 3790 Running tail -f test &
[root@localhost ~]#kill -9 3775 #kill vim进程需要 -9
[root@localhost ~]# jobs -l
[2]- 3716 Stopped (tty output) vim install.log
[3]+ 3775 Killed vim anaconda-ks.cfg
[4] 3790 Running tail -f test &
[root@localhost ~]#kill 3716
#缺省为 -15,发现vim进程kill不掉,需要强制执行。
[root@localhost ~]#kill 3790
#普通进程是可以kill 掉的
jobs –l查看: [4]- 3790 Terminated tail -f test,稍后该记录被清掉。
4、脱机及注销后任务执行
此方式不常用。
nohup 可以让你在脱机或注销后(比如exit退出当前shell),还能够让工作继续进行。
nohup [命令与参数] 在当前终端前台执行。
nohup [命令与参数] & 在后台执行。
[root@localhost ~]# nohup tail -F test &
[1] 3877
[root@localhost ~]# exit
[root@localhost ~]# ps ax |grep tail
3877 ? S 0:00 tail -f test