zoukankan      html  css  js  c++  java
  • 运维常用工具

    Proc 文件系统

    通过proc文件系统,可查看和修改内核参数

    # CPU信息
    cat /proc/cpuinfo
    # 内存信息:
    cat /proc/meminfo
    # 详细的内存映射信息
    cat /proc/zoneinfo
    # 磁盘映射信息
    cat /proc/mounts
    # 系统平均负载
    cat /proc/loadavg
    进程
    htop 进程实时监控
    # 安装 epel源
    yum install htop
    操作:
    箭头 滚动列表;空格 标记进程;c 标记进程及子进程;U 取消所有标记;k kill进程/标记的进程;t 树型显示;p 切换路径显示;[] 调整优先级
    u 显示某用户的进程;H 显示线程;e 显示进程环境变量;K 显示内核线程;i 设置IO优先级;l 用lsof列出文件;+- 折叠树;s 调用strace系统调用
    <> 切换排序;PMT 按CPU% MEM% TIME排序;I 逆序;CS 设置

    内存
    ## 假如我们需要关注的进程id为12788 关注点为物理内存占用
    1、通过进程 status
    cat /proc/12788/status | grep VmRSS    # VmRSS表示物理内存
    2、通过 pmap
    pmap -x 12788 | grep total   # 统计结果的第二项RSS
    3、通过 smaps
    cat /proc/12788/smaps | grep '^Rss:' | awk '{sum+=$2} END{print sum}'  # 这是计算的结果
    4、通过 ps
    ps -e -o 'pid,pcpu,rsz,vsz,stime,user,comm,args,uid' | awk '$1 ~ /12788/'   # rsz列即为物理内存
    ps -e -o 'pid,pcpu,rsz,vsz,stime,user,comm,args,uid' | sort -k3nr  # 按内存占用降序
    5、通过 top
    top -p 12788  # RES列为物理内存占用
    CPU
    show-busy-java-threads

    快速排查java的CPU性能问题,自动查出运行的java进程中消耗CPU多的线程,并打印出其线程栈,从而确定导致性能问题的方法调用

    部署:
    curl -o show-busy-java-threads.sh https://raw.githubusercontent.com/oldratlee/useful-scripts/master/show-busy-java-threads
    运行:
    bash show-busy-java-threads.sh #查找系统所有java程序
    bash show-busy-java-threads.sh -p PID #仅查找指定PID的java程序
    bash show-busy-java-threads.sh -h # 查看帮助
    网络
    iptraf-ng 网络分析工具
    # 安装 base源
    yum install iptraf
    图形化界面,面对的主要是是数据包,偏向于三层、二层网络深层次排查
    运行 iptraf-ng
    在SecureCRT中显示有问题,可使用Tmux
    NetHogs 查看进程的网络传输情况
    netthogs可以显示每个程序的网络传输情况
    安装nethogs工具 [epel源]
    yum install https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/n/nethogs-0.8.5-1.el7.x86_64.rpm
    依赖libpcap
    语法:
    nethogs [-V] [-h] [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [device [device [device ...]]]
    -d num,更新频率,默认1秒
    运行中的操作:
    q,退出;s,按发送流量排序;r,按接收流量排序;m,在KB、B、MB、KB/s之间切换
    iftop 网络流量监控
    # 安装 epel源
    下载:http://www.ex-parrot.com/~pdw/iftop/
    yum install iftop
    操作
    h 帮助;n 禁用DNS解析;t 流量方向;p 显示端口;N 端口名称解析;P 暂停;jk 上行滚动
    rates 表示过去2s 10s 40s 的平均流量

    tcp-connection-state-counter

    统计各个TCP连接状态的个数,方便排查系统连接负荷问题

    部署:
    curl -o tcp-connection-state-counter.sh https://raw.githubusercontent.com/oldratlee/useful-scripts/master/tcp-connection-state-counter
    运行:
    bash tcp-connection-state-counter.sh
    TIME_WAIT 7016
    ESTABLISHED 1095
    LISTEN 44
    CLOSE_WAIT 13
    LAST_ACK 1
    FIN_WAIT1 1
    磁盘
    iotop 实时磁盘IO查看
    # 安装 base源
    yum install iotop
    按键:左右 排序列;r 反转排序;o 只显示有IO的进程或线程;p 只显示进程不显示线程;a 累积;i 改变IO优先级;q 退出;任意键 强制刷新
    iotop -p PID  #只查看指定PID的进程的IO情况
    iotop -u USER  #只查看指定用户的进程/线程IO情况

    agedu 磁盘空间使用
    # 安装 epel源
    yum install agedu
    分析磁盘使用情况,支持以web页面方式查看
    1、扫描指定目录
    agedu -s /    # 扫描所有目录,生成agedu.dat文件
    2、web方式展现
    agedu -w --address 192.168.1.77:8089 --auth none
    -w,--web 启动web服务器
    --auth none 不需要验证
    对于生产环境,可以下载agedu.dat在本地启动web服务查看;或通过ssh临时建立端口转发,进行中转,如
    #ssh -p 22 -C -f -N -g -L 80:192.168.1.77:8089 root@192.168.1.77 
    #将发往本机192.168.1.50(本地服务器) 80端口访问转发到192.168.1.77(生产服务器)的8089端口,此时访问http://192.168.1.50 即可

    综合
    nmon 系统资源监控
    # 安装 epel源
    yum install nmon
    在SecureCRT中显示有问题,可使用Tmux
    操作:
    c CPU;C CPU大图;-+ 刷新频率;U 分核心显示;m 内存;V 虚拟内存;j 文件系统;d 磁盘;n 网络;. 仅显示繁忙的磁盘/CPU

    性能测试

    磁盘
    IOZone 磁盘读取性能测试
    下载:http://www.iozone.org/src/current/
    # 安装 有依赖
    yum install http://www.iozone.org/src/current/iozone-3-487.i386.rpm
    # 用法
    /opt/iozone/bin/iozone -h  # 查看帮助  参数非常多
    ./iozone -a -n 512 -g 10m -i 0-i 1 -i 5 -f /mnt/iozone -Rb ./iozone.xls
    参数:
    -a 使用全自动模式
    -n 最小文件大小,默认单位Kb
    -g 最大文件大小,默认单位Kb
    -i 要运行的测试
    -f 指定测试文件的名字,测试完成后会自动删除
    -R 产生Excel到标准输出
    -b 保存输出到指定文件
    FIO 磁盘性能测试
    # 安装 有依赖包
    yum install https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Packages/f/fio-3.1-1.el7.x86_64.rpm
    # 测试随机写性能
    fio -name randomwrite -rw=randwrite -bs=10k -runtime=100 -iodepth 128 -ioengine libaio -direct=1 --size=1G --randrepeat=1 --directory=/mnt --nrfiles=1 --openfiles=1 --group_reporting
    # 测试顺序写性能
    fio -name sequentialwrite -rw=write -bs=10k -runtime=100 -iodepth 128 -ioengine libaio -direct=1 --size=1G --randrepeat=1 --directory=/mnt --nrfiles=1 --openfiles=1 -group_reporting
    ## 输出类似如下
    sequentialwrite: (g=0): rw=write, bs=(R) 10.0KiB-10.0KiB, (W) 10.0KiB-10.0KiB, (T) 10.0KiB-10.0KiB, ioengine=libaio, iodepth=128
    fio-3.1
    Starting 1 process
    sequentialwrite: Laying out IO file (1 file / 1024MiB)
    Jobs: 1 (f=1): [W(1)][100.0%][r=0KiB/s,w=5604KiB/s][r=0,w=560 IOPS][eta 00m:00s]
    ...省略...
    参数说明:
    参数非常多,详细参考man手册,man fio
    -name  job名称影响生成的测试文件的名称
    -rw=  测试类型,randwrite随机写 randread随机读 randrw随机读写 read顺序读 write顺序写 rw读写
    -bs=  单次io的块大小
    -runtime= 测试时间,秒,若不设置,则按设置的大小写完为止
    -iodepth 队列深度
    -ioengine  io引擎,如psync libaio sync vsync pvsync等等
    -direct=1 禁用系统io buffer
    --size=  测试的文件大小
    -numjobs=  线程数
    --randrepeat=
    --directory= 使用指定的目录
    --nrfiles= 测试中使用的文件数
    --openfiles= 打开文件的数量,默认和nrfiles一致
    -group_reporting 汇总报告
    其它压测工具
    ab 工具
    yum install httpd-tools
    # Get请求
    ab -c10 -n100000 "http://localhost:8080/genid"
    # Post请求
    ab -c10 -n1000 -p postfile -T 'application/x-www-form-urlencoded' http://localhost:8080/update
    postfile内容:accountId=1149983321489408&clientDesc=1
    mysqlslap 工具
    # 单线程测试
    mysqlslap -a -uroot -pmypasswd
    # 多线程测试
    mysqlslap -a -c 100 -uroot -pmypasswd
    # 多次测试对测试结果求平均值
    mysqlslap -a -i 10 -uroot -pyouarebest
    # 测试读操作的性能指标
    mysqlslap -a -c10 --number-of-queries=1000 --auto-generate-sql-load-type=read -uroot -pmypasswd
    # 测试写操作的性能指标
    mysqlslap -a -c10 --number-of-queries=1000 --auto-generate-sql-load-type=write -uroot -pmypasswd
    # 测试读写混合操作的性能指标
    mysqlslap -a -c10 --number-of-queries=1000 --auto-generate-sql-load-type=mixed -uroot -pmypasswd
    # 多次不同并发数混合操作的性能指标
    mysqlslap -a --concurrency=50,100 --number-of-queries 1000 --debug-info --engine=myisam,innodb --iterations=5 -uroot -pmypasswd
    sysbench 工具
    1) CPU性能测试
    sysbench --test=cpu --cpu-max-prime=20000 run
    2 )线程锁性能测试
    sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run
    3) 磁盘随机IO性能测试
    sysbench --test=fileio --file-num=16 --file-total-size=100M prepare
    sysbench --test=fileio --file-total-size=100M --file-test-mode=rndrd --max-time=180 --max-requests=100000000 --num-threads=16 --init-rng=on --file-num=16 --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run
    sysbench --test=fileio --file-num=16 --file-total-size=2G cleanup
    4 )内存性能测试
    sysbench --test=memory --memory-block-size=16k --memory-total-size=16K run
    4) MYSQL事务性操作测试
    sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000 --mysql-user=root --mysql-host=localhost --mysql-password=youarebest --mysql-db=test run

    其他工具

    tmux 终端多路利用器
    # 安装 epel源 1.8
    yum install tmux
    # yum install https://copr-be.cloud.fedoraproject.org/results/hnakamur/tmux/epel-7-x86_64/00517591-tmux/tmux-2.3-2.el7.centos.x86_64.rpm
    tmux是终端多路复用器,可创建/访问多个终端,是screen的替代品
    命令格式:
    tmux [-28lCquvV] [-c shell-command] [-f file] [-L socket-name] [-S socket-path] [command [flags]]
    选项:
    -2,强制使用256色;-8 支持88色
    操作方法:
    ctrl+b,激活控制台,此时其他按键生效,快捷键前缀
    窗格:% 竖直窗格;”水平窗格;方向键 在窗格移动;q 显示编号;o 切换窗格;{} 交换窗格位置;t 在当前窗格显示时间;i 显示当前窗格信息
    z 放大当前窗格;[ 滚屏 q 退出滚屏;
    窗口:c 新窗口;, 重命名当前窗口;w 列出窗口;n 下一窗口;p 下一窗口;l 进入之前操作的窗口;0~9 进入指定窗口;. 修改当前窗口编号
    f 根据显示的内容搜索并切换窗口;& 关闭当前窗口
    会话:s 切换会话;d 分离会话;D 分离指定会话;$ 重命名会话;
    命令模式:: 进入命令模式;new -s name 新会话;
    除非显式关闭会话,否则重启前,会话都不会消失
    登到某个会话后,ctrl-b+d 退出该会话,但会话不会关闭;ctrl+d 退出会话同时关闭该会话
    常用命令
    tmux new -s name  创建会话name;不加参数则创建默认名称的会话
    tmux ls  显示会话列表
    tmux attch  进入最近的会话;tmux a 简写;tmux a -t name 连接指定的会话
    tmux rename -t s1 s2 重命名会话s1为s2
    tmux kill-session 关闭上次打开的会话
    tmux kill-session -t s1 关闭指定的会话
    tmux kill-server 关闭所有会话
    tmux list-key 列出所有快捷键
    tmux list-command 列出所有命令
    火焰图

    常见火焰图类型:On-CPU Off-CPU Memory Hot/Cold Differential
    火焰尖部的是CPU正在执行的操作,颜色是随机的,并没有实际意义,纵向表示调用栈深度,横向表示消耗的时间
    一个格子越宽越说明其可能是瓶颈
    主要看那些比较宽大的火苗,特别留意那些类似平顶山的火苗
    生成火焰图,通常使用 perf 或 systemtap 。perf更常用,systemtap需要使用它的编程语言
    春哥的 nginx-systemtap-toolkit 中很多工具适用任何C/CPP编写的程序

    On-CPU 用于瓶颈是CPU;Off-CPU 用于瓶颈是IO或锁
    若不能确认是那种,可通过压测工具来确认,若不管怎么压CPU都变化不大,则说明程序被IP或锁卡住了,属于Off-CPU
    若还不能确认,则两种都测一下,通常它们差异会比较大;若两张图差不多,通常认为CPU被其他进程抢占了

    #安装 kernel-devel 和 kernel-debuginfo
    yum install yum-utils
    yum install kernel-devel
    debuginfo-install kernel
    #当火焰图中有十六进制乱码时 意味着对应程序缺失debuginfo,可通过gdb工具确认
    gdb -p <PID>
    ## CentOS-Debuginfo.repo需要启用

    perf/systemtap本身对系统性能影响较小,可在线上环境定时采集并进行分析

    转发:轻风博客 » 运维常用工具

  • 相关阅读:
    前端性能优化-基础认知
    AngularJS表单验证开发案例
    信息无缝滚动效果marquee
    好用的切换滑动焦点图框架jquery.superslide
    jQuery核心探究
    焦点图轮播图原理与机制
    删除数组中指定的某个元素
    伪响应式开发(PC和Mobile分离)
    18丨CentOS:操作系统级监控及常用计数器解析(下)
    17丨CentOS:操作系统级监控及常用计数器解析
  • 原文地址:https://www.cnblogs.com/-xuan/p/11912219.html
Copyright © 2011-2022 走看看