专栏首页星汉技术Linux基础之系统资源监控与任务管理 原

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux中基本命令 原

    3、man 命令:enter按行翻,空格按页翻;HOME/END键可以快速到首页/尾页(SecureCRT中无效);查找按 /要查找的内容,查找 下一个/上一个...

    云飞扬
  • 原 荐 Centos 7+CDH5.7.2全

    云飞扬
  • Linux基础之进程 原

    操作系统的一个重要功能就是为进程提供方便,比如启动进程、为进程分配内存空间、管理进程的相关信息等等。

    云飞扬
  • vim插件——rainbow 转

        $vim ~/.vimrc     在call vundle#begin()和call vundle#end()之间添加Plugin 'luochen...

    双面人
  • Nginx Linux详细安装部署教程

    Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤

    用户7657330
  • 手把手教你,嘴对嘴传达------Nginx网站服务(访问状态统计,基于域名,端口,IP的虚拟web主机访问)

    nginx -V查看已安装的Nginx是否包含HTTP_ STUB _STATUS模块

    不吃小白菜
  • 在CentOS7上配置rsync源服务器+inotify实时同步

    rsync是一个开源的快速备份工具,可以再不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,再传输前执行压缩,因此非常适用于异...

    拓荒者
  • 与其争论java和.net的差别,还不如多想点用编程技术挣钱的方式

    年前和最近,我发现在博客园和其它地方,有不少争论java和.net哪个好的文章,其实这是种好现象。虽然到了架构层面,技术是通用的,但兼听则明,而且技多不...

    用户1153489
  • CnetOS模板机配置及优化过程

    小柒吃地瓜
  • 卷积神经网络源码——最终输出部分的理解

      针对matlab版本的卷积神经网络的最终分类器(输出部分)的理解:   部分代码: '''cnnff''' net.fv = []; %...

    深度学习思考者

扫码关注云+社区

领取腾讯云代金券