Linux基础之系统资源监控与任务管理

Linux基础之系统资源监控与任务管理

1、系统资源监控

监控系统资源有如下几个命令:前端

free:观察内存(memory)使用状况。shell

uname:查阅系统与核心相关信息。vim

uptime:观察系统启动时间与工做负载。缓存

netstat:网络监控。bash

vmstat:侦测系统资源变化,CPU/内存/磁盘输入输出状态。服务器

一、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显示的方式同样。但系统本来是不提供这样显示的方式。ssh

-t:在输出的最终结果时,显示物理内存与swap的总量。tcp

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已写磁盘或者已从磁盘读出的内容。

二、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

三、uptime系统负载

uptime:观察系统启动时间与工做负载。

[root@localhost ~]# uptime
 08:05:08 up  3:10,  2 users,  load average: 0.00, 0.00, 0.00

显示目前系统当前时间、已经开机多长的时间、用户数、以及一、五、15分钟的平均负载。

四、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

在服务状态并无发生改变。服务器重启后生效,防火墙会恢复到服务器重启以前的状态。

五、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 之后才支持)。

2、任务管理

登陆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.前台

    能够控制与执行命令的bash环境称为前台进程。

2.后台

    在操做系统中自行运行,你没法使用[ctrl]+c终止,可以使用bg/fg命令操做的任务,能够经过jobs命令查看后台执行的任务(非系统进程)。

    能够经过Ctrl+z将前台执行的任务放置后台(放置到后台,会暂停该任务)。

二、多任务执行

在当前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

三、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,稍后该记录被清掉。

四、脱机及注销后任务执行

此方式不经常使用。

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

上一篇:Linux基础之进程

下一篇:Linux基础之vim

相关文章
相关标签/搜索