• 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
  • 相关阅读:
    201301 JAVA题目0-1级, 华为笔试题
    病毒传播, 美团笔试题
    OC基础 字符串
    IOS OC语言基础(一)类的创建
    pyautogui 鼠标精灵模拟登陆
    ajax hook注入
    aiohttp异步请求
    IOS自学教程大全
    提高python工具包
    Kafka与Flume区别
  • 原文地址:https://www.cnblogs.com/hujianli/p/9347714.html
Copyright © 2020-2023  润新知