Linux系统管理技巧

  • 使用w命令查看当前系统的负载
root@ip-172-31-8-212:~# w
 19:03:42 up 8 days,  5:26,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
ubuntu   pts/0    223.223.196.170  18:37    0.00s  0.06s  0.00s sshd: ubuntu [priv]
View Code

 

第一行从左到右显示的信息依次为:时间、系统运行时间、登录用户数、平均负载

第二行开始:当前登录的用户名、登录地址

注意观察第一行load average后面的3个数值

1个数值:表示1分钟内系统的平均负载值

2个数值:5分钟内系统的平均负载值

3个数值:15分钟内系统的平均负载值

着重看第1个值,表示单位时间段内使用CPU的活动进程数,(值越大说明服务器压力越大),一般情况下,这个值只要不超过服务器的CPU数量就没有关系

,如果服务器的CPU数量为8.那么值小于8就说明当前服务器没有压力,否则就需要关注一下了

cat /proc/cpuinfo #查看CPU详细信息

root@ip-172-31-8-212:~# grep -c 'processor' /proc/cpuinfo    #查看几颗物理CPU
1

 

 

  • 用vmstat命令监控系统的状态
系统性能状态{

            vmstat 1 9
            
            r      # 等待执行的任务数。当这个值超过了cpu线程数,就会出现cpu瓶颈。
            b      # 等待IO的进程数量,表示阻塞的进程。
            swpd   # 虚拟内存已使用的大小,如大于0,表示机器物理内存不足,如不是程序内存泄露,那么该升级内存。
            free   # 空闲的物理内存的大小
            buff   # 已用的buff大小,对块设备的读写进行缓冲
            cache  # cache直接用来记忆我们打开的文件,给文件做缓冲,(把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)
            inact  # 非活跃内存大小,即被标明可回收的内存,区别于free和active -a选项时显示
            active # 活跃的内存大小 -a选项时显示
            si   # 每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露,要查找耗内存进程解决掉。
            so   # 每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。
            bi   # 块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte
            bo   # 块设备每秒发送的块数量,例如读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。
            in   # 每秒CPU的中断次数,包括时间中断。in和cs这两个值越大,会看到由内核消耗的cpu时间会越多
            cs   # 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用。
            us   # 用户进程执行消耗cpu时间(user time)  us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期超过50%的使用,那么我们就该考虑优化程序算法或其他措施
            sy   # 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。
            id   # 空闲 CPU时间,一般来说,id + us + sy = 100,一般认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。
            wt   # 等待IOCPU时间。Wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。
            
            如果 r 经常大于4,且id经常少于40,表示cpu的负荷很重。
            如果 pi po 长期不等于0,表示内存不足。
            如果 b 队列经常大于3,表示io性能不好。
View Code

 

  • 用top命令显示进程所占的系统资源

常用的命令 top -bn1 | grep head 非动态的打印系统资源的使用情况

top{

            前五行是系统整体的统计信息。
            第一行: 任务队列信息,同 uptime 命令的执行结果。内容如下:
                01:06:48 当前时间
                up 1:22 系统运行时间,格式为时:分
                1 user 当前登录用户数
                load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
                三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

            第二、三行:为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
                Tasks: 29 total 进程总数
                1 running 正在运行的进程数
                28 sleeping 睡眠的进程数
                0 stopped 停止的进程数
                0 zombie 僵尸进程数
                Cpu(s): 0.3% us 用户空间占用CPU百分比
                1.0% sy 内核空间占用CPU百分比
                0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
                98.7% id 空闲CPU百分比
                0.0% wa 等待输入输出的CPU时间百分比
                0.0% hi
                0.0% si

            第四、五行:为内存信息。内容如下:
                Mem: 191272k total 物理内存总量
                173656k used 使用的物理内存总量
                17616k free 空闲内存总量
                22052k buffers 用作内核缓存的内存量
                Swap: 192772k total 交换区总量
                0k used 使用的交换区总量
                192772k free 空闲交换区总量
                123988k cached 缓冲的交换区总量。
                内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
                该数值即为这些内容已存在于内存中的交换区的大小。
                相应的内存再次被换出时可不必再对交换区写入。

            进程信息区,各列的含义如下:  # 显示各个进程的详细信息

            序号 列名    含义
            a   PID      进程id
            b   PPID     父进程id
            c   RUSER    Real user name
            d   UID      进程所有者的用户id
            e   USER     进程所有者的用户名
            f   GROUP    进程所有者的组名
            g   TTY      启动进程的终端名。不是从终端启动的进程则显示为 ?
            h   PR       优先级
            i   NI       nice值。负值表示高优先级,正值表示低优先级
            j   P        最后使用的CPU,仅在多CPU环境下有意义
            k   %CPU     上次更新到现在的CPU时间占用百分比
            l   TIME     进程使用的CPU时间总计,单位秒
            m   TIME+    进程使用的CPU时间总计,单位1/100秒
            n   %MEM     进程使用的物理内存百分比
            o   VIRT     进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
            p   SWAP     进程使用的虚拟内存中,被换出的大小,单位kb。
            q   RES      进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
            r   CODE     可执行代码占用的物理内存大小,单位kb
            s   DATA     可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
            t   SHR      共享内存大小,单位kb
            u   nFLT     页面错误次数
            v   nDRT     最后一次写入到现在,被修改过的页面数。
            w   S        进程状态。
                D=不可中断的睡眠状态
                R=运行
                S=睡眠
                T=跟踪/停止
                Z=僵尸进程
            x   COMMAND  命令名/命令行
            y   WCHAN    若该进程在睡眠,则显示睡眠中的系统函数名
            z   Flags    任务标志,参考 sched.h

        }

常用命令 top -bn1 | head  #非动态打印系统状态
View Code

 

  • 使用sar命令监控系统状态

  sar命令可以监控系统的所有状况,比如平均负载,磁盘状态、网卡流量、内存使用

  

安装sysstat命令:
apt install sysstat

ar -n DEV 1 10       # 查看网卡网速流量

网卡流量查看{

        watch more /proc/net/dev    # 实时监控流量文件系统 累计值
        iptraf                      # 网卡流量查看工具
        nethogs -d 5 eth0 eth1      # 按进程实时统计网络流量 epel源nethogs
        
        sar {
            -n参数有6个不同的开关: DEV | EDEV | NFS | NFSD | SOCK | ALL 
            DEV显示网络接口信息
            EDEV显示关于网络错误的统计数据
            NFS统计活动的NFS客户端的信息
            NFSD统计NFS服务器的信息
            SOCK显示套 接字信息
            ALL显示所有5个开关
            
            sar -n DEV 1 10
            
            rxpck/s   # 每秒钟接收的数据包
            txpck/s   # 每秒钟发送的数据包
            rxbyt/s   # 每秒钟接收的字节数
            txbyt/s   # 每秒钟发送的字节数
            rxcmp/s   # 每秒钟接收的压缩数据包
            txcmp/s   # 每秒钟发送的压缩数据包
            rxmcst/s  # 每秒钟接收的多播数据包
View Code

 

  • 使用nload命令查看网卡流量
安装nload:
apt install nload

执行nload
View Code

 

  •  使用free命令查看内存状态
root@ip-172-31-8-212:~# free
              total        used        free      shared  buff/cache   available
Mem:        1014516      390956      146840       11064      476720      402976
Swap:             0           0           0

更多操作可以free --help进行查看
View Code

 

 

  • 使用ps查看进程状态
进程管理{

        ps -eaf               # 查看所有进程
        kill -9 PID           # 强制终止某个PID进程
        kill -INT PID          # -INT参数通常类似于ctrl-c
        kill -15 PID          # 安全退出 需程序内部处理信号
        cmd &                 # 命令后台运行
        nohup cmd &           # 后台运行不受shell退出影响
        ctrl+z                # 将前台放入后台(暂停)
        jobs                  # 查看后台运行程序
        jobs -l                 # jobs -l 选项还能够显示出挂在后台进行命令的PID
        bg 2                  # 启动后台暂停进程
        fg 2                  # 调回后台进程
        pstree                # 进程树
        vmstat 1 9            # 每隔一秒报告系统性能信息9次
        sar                   # 查看cpu等状态
        lsof file             # 显示打开指定文件的所有进程
        lsof -i:32768         # 查看端口的进程
        renice +1 180         # 把180号进程的优先级加1
        
        ps{

            ps aux |grep -v USER | sort -nk +4 | tail       # 显示消耗内存最多的10个运行中的进程,以内存使用量排序.cpu +3    
            # USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
            %CPU     # 进程的cpu占用率
            %MEM     # 进程的内存占用率
            VSZ      # 进程虚拟大小,单位K(即总占用内存大小,包括真实内存和虚拟内存)
            RSS      # 进程使用的驻留集大小即实际物理内存大小
            START    # 进程启动时间和日期
            占用的虚拟内存大小 = VSZ - RSS
            
            ps -eo pid,lstart,etime,args         # 查看进程启动时间

        }
View Code

 

 

  • 使用netstat查看网络状态
netstat{

        # 几十万并发的情况下netstat会没有响应,建议使用 ss 命令
        -a     # 显示所有连接中的Socket
        -t     # 显示TCP连接
        -u     # 显示UDP连接
        -n     # 显示所有已建立的有效连接
        netstat -anlp           # 查看链接
        netstat -r              # 查看路由表
View Code

 

  •   使用ss列出端口和协议信息
  ss{

        # netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多
        ss -s          # 列出当前socket详细信息
        ss -l          # 显示本地打开的所有端口
        ss -pl         # 显示每个进程具体打开的socket
        ss -ant        # 显示所有TCP socket
        ss -u -a       # 显示所有UDP Socekt
        ss dst 192.168.119.113         # 匹配远程地址
        ss dst 192.168.119.113:http    # 匹配远程地址和端口号
        ss dst 192.168.119.113:3844    # 匹配远程地址和端口号
        ss src 192.168.119.103:16021   # 匹配本地地址和端口号
        ss -o state established '( dport = :smtp or sport = :smtp )'        # 显示所有已建立的SMTP连接
        ss -o state established '( dport = :http or sport = :http )'        # 显示所有已建立的HTTP连接
        ss -x src /tmp/.X11-unix/*         # 找出所有连接X服务器的进程

    }
View Code

 

posted @ 2018-07-21 19:29  胡小建  阅读(296)  评论(0编辑  收藏  举报