性能测试学习之linux服务器监控性能测试(三)

1,410 阅读19分钟



​性能测试学习之linux服务器监控性能测试(三)

其实这个世界上太多这样的普通人,没有高薪,没有好看的颜值,没有完美的身躯。身在这个社会的大染缸里,我们都身不由己。这东西看缘分吧,只是时候未到而已,慢慢等吧,总有一天你会老的

正文

测试目的:发现服务器的性能瓶颈。配置的不同能够承载的最大任务数不同,能够承载的压力也不同

服务器性能测试范围

1.1 测试范围


  • CPU

  • 内存

  • 硬盘

  • 网络

  • 版本(软件、应用版本)


1.2 测试与生产配置不相同


  • 多次性能压测预估

进程与线程的定义和区别

2.1 进程


  • 概念

    一个正在运行的程序或者软件就是一个进程,它是操作系统进行资源分配的基本单位,也就是说每启动一个进程,操作系统都会给其分配一定的运行资源(内存资源)保证进程的运行。

    比如:现实生活中的公司可以理解成是一个进程,公司提供办公资源(电脑、办公桌椅等),真正干活的是员工,员工可以理解成线程

  • 注意

    (1)一个程序运行后至少有一个进程,一个进程默认有一个线程

    (2)进程里面可以创建多个线程,线程是依附在进程里面的,没有进程就没有线程。

    (3)进程之间不共享全局变量

    (4)主进程会等待所有的子进程执行结束再结束

  • 说明

    多进程可以完成多任务,每个进程就好比一家独立的公司,每个公司都各自在运营,每个进程也各自在运行,执行各自的任务。


2.2 线程


  • 概念

    线程是进程中执行代码的一个分支,每个执行分支(线程)要想工作执行代码需要cpu进行调度 ,也就是说线程是cpu调度的基本单位,每个进程至少都有一个线程,而这个线程就是我们通常说的主线程

  • 注意

    (1)线程之间执行是无序的

    (2)主线程会等待所有的子线程执行结束再结束

    (3)线程之间共享全局变量

    (4)线程之间共享全局变量数据出现错误问题

  • 说明

    (1)线程之间执行是无序的,它是由cpu调度决定的 ,cpu调度哪个线程,哪个线程就先执行,没有调度的线程不能执行

    (2)进程之间执行也是无序的,它是由操作系统调度决定的,操作系统调度哪个进程,哪个进程就先执行,没有调度的进程不能执行


2.3 锁


互斥锁

对共享数据进行锁定,保证同一时刻只能有一个线程去操作。


注意:

互斥锁是多个线程一起去抢,抢到锁的线程先执行,没有抢到锁的线程
需要等待,等互斥锁使用完释放后,其它等待的线程再去抢这个锁

互斥锁的作用就是保证同一时刻只能有一个线程去操作共享数据,保证共享数据不会出现错误问题


使用互斥锁的好处确保某段关键代码只能由一个线程从头到尾完整地去执行


使用互斥锁会影响代码的执行效率,多任务改成了单任务执行


互斥锁如果没有使用好容易出现死锁的情况


  • 死锁

    (1)一直等待对方释放锁的情景就是死锁,会造成应用程序的停止响应,不能再处理其它任务

    (2)使用互斥锁的时候需要注意死锁的问题,要在合适的地方注意释放锁


  • 其他锁

    乐观锁、悲观锁、读写锁、公平\非公平锁、自旋锁等


进程与线程的优缺点

3.1 进程优点


  • 每个进程相互独立,不影响主程序的稳定性,子进程崩溃不影响其他进程

  • 通过增加CPU,就可以扩充性能

  • 可以尽量减少线程加锁与解锁的影响,极大的提高了性能


3.2 进程缺点


  • 逻辑控制复杂,需要和主程序交互

  • 多进程调度开销大


3.3 线程优点


  • 程序逻辑和控制方式简单

  • 所有线程可以直接共享内存和变量等


3.4 线程缺点


  • 每个线程与主程序共用地址空间,最大内存地址受限

  • 线程之间的同步和加锁不易控制

  • 一个线程的崩溃可能影响到整个程序的稳定性

服务器实时cpu监控

4.1 liunx服务器监控性能命令


man 

Linux下函数手册命令,可以查看所有命令使用方法,可下载汉化包可汉化

语法
man(选项)(参数)

选项
-a:在所有的man帮助手册中搜索;
-f:等价于whatis指令,显示给定关键字的简短描述信息;
-P:指定内容时使用分页程序;
-M:指定man手册搜索的路径。

参数
数字:指定从哪本man手册中搜索帮助;
关键字:指定要搜索帮助的关键字
  • top 

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器

        

语法
top(选项)

选项
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;(常用)
-n<次数>:循环显示的次数。

top交互命令
在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,
如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。

h:显示帮助画面,给出一些简短的命令总结说明;(常用)
k:终止一个进程;
i:忽略闲置和僵死进程,这是一个开关式命令;
q:退出程序;
r:重新安排一个进程的优先级别;
S:切换到累计模式;
s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
f或者F:从当前显示中添加或者删除项目;
o或者O:改变显示项目的顺序;
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;(常用)
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
w:将当前设置写入~/.toprc文件中;
z:彩色/黑白显示(常用)


load average :系统运行队列的平均利用率,也可以认为是可运行进程平均数。三个值分别表示在最后的1分钟、5分钟、15分钟的平均负载值。


在单核CPU中load average的值为1时表示满负荷状态。同理在多核CPU中满负荷的load average的值为1*cpu核数


  • vmstat

    监控操作系统报告关于进程、内存、I/O等系统整体运行状态

语法
vmstat(选项)(参数)

选项
-a:显示活动内页;
-f:显示启动后创建的进程总数;
-m:显示slab信息;
-n:头信息仅显示一次;
-s:以表格方式显示事件计数器和内存状态;
-d:报告磁盘状态;
-p:显示指定的硬盘分区状态;
-S:输出信息的单位。

参数
事件间隔:状态信息刷新的时间间隔;
次数:显示报告的次数。
  • free

    显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区


    语法
    free(选项)
    选项
    -b:以Byte为单位显示内存使用情况;
    -k:以KB为单位显示内存使用情况;
    -m:以MB为单位显示内存使用情况;
    -o:不显示缓冲区调节列;
    -s<间隔秒数>:持续观察内存使用状况;
    -t:显示内存总和列;
    -V:显示版本信息。
    


4.2 实时监控-CPU

  • mpstat

    可以查看多核心CPU中每个计算核心的统计数据


    语法
    mpstat(选项)(参数)
    选项
    -P:指定CPU编号。
    参数
    间隔时间:每次报告的间隔时间(秒);
    次数:显示报告的次数。
    

    当没有参数时, mpstat则显示系统启动以后所有信息的平均值。有 intervall时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个 intervale时间段的平均信息


4.3 实时监控-网络

  • netstat

    用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况


    语法
    netstat(选项)
    选项
    -a或--all:显示所有连线中的Socket;
    -A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
    -c或--continuous:持续列出网络状态;
    -C或--cache:显示路由器配置的快取信息;
    -e或--extend:显示网络其他相关信息;
    -F或--fib:显示FIB;
    -g或--groups:显示多重广播功能群组组员名单;
    -h或--help:在线帮助;
    -i或--interfaces:显示网络界面信息表单;
    -l或--listening:显示监控中的服务器的Socket;
    -M或--masquerade:显示伪装的网络连线;
    -n或--numeric:直接使用ip地址,而不通过域名服务器;
    -N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
    -o或--timers:显示计时器;
    -p或--programs:显示正在使用Socket的程序识别码和程序名称;
    -r或--route:显示Routing Table;
    -s或--statistice:显示网络工作信息统计表;
    -t或--tcp:显示TCP传输协议的连线状况;
    -u或--udp:显示UDP传输协议的连线状况;
    -v或--verbose:显示指令执行过程;
    -V或--version:显示版本信息;
    -w或--raw:显示RAW传输协议的连线状况;
    -x或--unix:此参数的效果和指定"-A unix"参数相同;
    --ip或--inet:此参数的效果和指定"-A inet"参数相同。
    


4.4 实时监控-磁盘

  • iostat

     iostate是对系统磁盘O操作进行监控,它的输出主要显示磁盘的

    读写操作的统计信息。同时给出cpu的使用情况

语法
iostat(选项)(参数)
选项
-c:仅显示CPU使用情况;
-d:仅显示设备利用率;
-k:显示状态以千字节每秒为单位,而不使用块每秒;
-m:显示状态以兆字节每秒为单位;
-p:仅显示块设备和所有被使用的其他分区的状态;
-t:显示每个报告产生时的时间;
-V:显示版号并退出;
-x:显示扩展状态。
参数
间隔时间:每次报告的间隔时间(秒);
次数:显示报告的次数。


4.4 万能命令

  • sar

    ( System Activity Reporter系统活动情況报告)是目前 Linux

    上最为全面的系统性能分析工具之ー,可以从多方面对系统的活

    动进行报告


    文件的读写情況、系统调用的使用情況、磁盘IO、CPU效率、

    内存使用状况、进程活动及IPC有关的活动等

语法
sar(选项)(参数)
选项
-A:显示所有的报告信息;
-b:显示I/O速率;
-B:显示换页状态;
-c:显示进程创建活动;
-d:显示每个块设备的状态;
-e:设置显示报告的结束时间;
-f:从指定文件提取报告;
-i:设状态信息刷新的间隔时间;
-P:报告每个CPU的状态;
-R:显示内存状态;
-u:显示CPU利用率;
-v:显示索引节点,文件和其他内核表的状态;
-w:显示交换分区状态;
-x:显示给定进程的状态。
参数
间隔时间:每次报告的间隔时间(秒);
次数:显示报告的次数。

4.5  Liunx下进程追踪

  • strace


    strace命令是一个集诊断、调试、统计与一体的工具,我们可以使用

    strace对应用的系统调用和信号传递的跟踪结果来对应用进行分析,

    以达到解決问题或者是了解应用工作过程的目的。

语法
strace  [  -dffhiqrtttTvxx  ] [ -acolumn ] [ -eexpr ] ...
    [ -ofile ] [-ppid ] ...  [ -sstrsize ] [ -uusername ]
    [ -Evar=val ] ...  [ -Evar  ]...
    [ command [ arg ...  ] ]

strace  -c  [ -eexpr ] ...  [ -Ooverhead ] [ -Ssortby ]
    [ command [ arg...  ] ]
选项
-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程.
-ff 如果提供-o filename,则所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号.
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针.
-q 禁止输出关于脱离的消息.
-r 打印出相对时间关于,,每一个系统调用.
-t 在输出中的每一行前加上时间信息.
-tt 在输出中的每一行前加上时间信息,微秒级.
-ttt 微秒级输出,以秒了表示时间.
-T 显示每一调用所耗的时间.
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.
-V 输出strace的版本信息.
-x 以十六进制形式输出非标准字符串
-xx 所有字符串以十六进制形式输出.
-a column 设置返回值的输出位置.默认 为40.
-e expr 指定一个表达式,用来控制如何跟踪.格式:[qualifier=][!]value1[,value2]...
qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用来限定的符号或数字.默认的 qualifier是 trace.感叹号是否定符号.例如:-eopen等价于 -e trace=open,表示只跟踪open调用.而-etrace!=open 表示跟踪除了open以外的其他调用.有两个特殊的符号 all 和 none. 注意有些shell使用!来执行历史记录里的命令,所以要使用\\.
-e trace=set 只跟踪指定的系统 调用.例如:-e trace=open,close,rean,write表示只跟踪这四个系统调用.默认的为set=all.
-e trace=file 只跟踪有关文件操作的系统调用.
-e trace=process 只跟踪有关进程控制的系统调用.
-e trace=network 跟踪与网络有关的所有系统调用.
-e strace=signal 跟踪所有与系统信号有关的 系统调用
-e trace=ipc 跟踪所有与进程通讯有关的系统调用
-e abbrev=set 设定strace输出的系统调用的结果集.-v 等与 abbrev=none.默认为abbrev=all.
-e raw=set 将指定的系统调用的参数以十六进制显示.
-e signal=set 指定跟踪的系统信号.默认为all.如 signal=!SIGIO(或者signal=!io),表示不跟踪SIGIO信号.
-e read=set 输出从指定文件中读出 的数据.例如: -e read=3,5
-e write=set 输出写入到指定文件中的数据.
-o filename 将strace的输出写入文件filename
-p pid 跟踪指定的进程pid.
-s strsize 指定输出的字符串的最大长度.默认为32.文件名一直全部输出.
-u username 以username的UID和GID执行被跟踪的命令


Linux监控工具

上边的命令,小编看了也很头疼,很难记住,其实用到的时候百度一下,记住常用的即可,但是呢除了百度,我们还可以使用工具,岂不美哉?


5.1 nmon介绍


nmon是一种在 Linux操作系统上广泛使用的监控与分析工具,nmon所记录的信息是比较全面的,它能在系统运行过程中实时地捕捉系统资源的使用情况,并且能输出结果到文件中,然后通过nmon_ analyzer工具产生数据文件与图形化结果。


5.2 nmon下载


nmon安装包选择适合自己系统的版本:
http://nmon.sourceforge.net/pmwiki.php?n=Site.Download

案例:
1. wget http://sourceforge.net/projects/nmon/files/nmon_linux_14i.tar.gz
2. tar gxvf nmon_linux_14i.tar.gz
3. mv nmon_x86_64_contos7 nmon
4. cp nmon/usr/bin/

5.3 nmon用法


  • -f 这是nmon必选参数,并且必须放在第一个,就是输出文件的意思;用该参数的话,nmon输出的文件名就是默认名称

        hostname_date_time. nmon;

  • -F< filename>这个参数和-f相同,只不过用户可以自己定义文名称;

  • -s 采集数据频率,也就是保存数据的频率

  • -c采集数据次数;

  • -t输岀最消耗资源的进程数据;

  • -h查看帮助;

案例
nmon -f -F demo.nmon -s 1 -c 10 -t 
采集时间(秒)=1x10
查看数据 cat demo.nmon

5.4 nmon结果采集分析


  • n mon_analyzer

    nmon _analysere的作用就是分析nmon数据采集后的结果,nmon _analyser需要借助 Excel的宏,WPS默认没有安装宏,需要下载插件。


  • nmon analyzer下载

    下载链接:

    https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power%20Systems/page/nmon_analyser

  • 用excel打开 nmon  analyser


    其有三张表,默认的第三张Release Notes是版本发布信息,第二张Settings是配置表,第一张是Analyser主界面,切换到此页面。

    点击Analyze nmon data按钮,打开***.nmon文件

  • 打开文件后,analyser会自动解析nmon文件,完后生成相对应的结果文件



5.5 nmon_analyzer重点sheet


  • SYS_SUMM系统汇总页,包含cpu占有率变化情况磁盘1O的变化情况等信息;

  • AAA关于操作系统以及nmon本身的一些信息;

  • CPUnn显示执行时间内CPU占用情況;

  • CPU_ALL I所有CPU概述,显示所有CPU平均占用情況;

  • CPU_SUMM每一个CPU在执行时间内的占用情况;

  • DGBUSY磁盘组每个 hdisk设备平均占用情况;

  • DGREAD每个磁盘组的平均读情况

  • DGSIZE每个磁盘组的平均读写情况;

  • DGWRITE每个磁盘组的平均写情况

  • DGXFER每个磁盘组的/O每秒操作;

  • MEM内存相关的主要信息,使用、空闲内存大小等。

  • NET显示系统中每个网络适配器的数据传输速率(干字节/秒

  • PAGE本 sheet统计相关页信息的记录


Linux定时任务

  • cron


        linux系统是由cron这个系统服务来控制的。Linux系统上包含很多的计划性工作。使用者自己也可以设置计划任务,所以inux系统提供了使用者控制计划任务的命令。


  • cr ontab的启动

          /sbin/ service crond status  查看定时任务的服务是否启动


         start/stop/ restart  启动服务/停止服务/重新启动服务


         reload  重新载入配置


  • crontab的服务权限


        crontab的权限管理存储在cron. allow文件与ron.deny文件与ron.deny文件


        cron.allw文件存储的是允许哪些用户使用 crontab


        cron.deny文件存储的是不允许哪些用户使用 crontab


  • crontab的使用场景说明

        

        当两个文件都不存在时,那么只允许root用户使用 crontab


        当cron. allow文件存在,而cron.deny文件不存在时,那么只

允许cron. allow文件中的用户使用 crontab

        

        当con.deny文件存在,而cron.alow文件不存在时,那么只要是没有列在cron.deny文件中的用户都可以使用 crontab

       

         如果两个文件都存在,而一个用户在两个文件中都有,那么以cron.alow文件中的为准,只要cron. allow文件用有该用户,则该用户就可以使用 crontab


  • crontab的使用


        命令: crontab-e在编辑页面输入命令即可


  • crontab的编辑格式


        基本格式: minute hour day month week command

        对应单位:分       时      天       月       周        命令    


  • crontab的时间单位说明


        第1列表示分钟00~59每分钟用*或者*/1表示

        第2列表示小时00~23(0表示0点)

        第3列表示日期01~31

        第4列表示月份01~12

        第5列标识号星期0~6(0表示星期天)

        第6列要运行命令


  • crontab的符号说明

        * 代表取值范围内的所有值

        / 代表每的意思

        - 代表从某个数字到某个数字

        , 分隔开几个不同的数字

案例
# 查看当前是否运行
/sbin/service crond status

# 编辑定时恩物列表
crontab -e

点关注,不迷路

好了各位,以上就是这篇文章的全部内容了,能看到这里的人啊,都是 人才

如果这个文章写得还不错,觉得「王采臣」我 有点东西 的话  求点赞👍 求关注❤️   求分享👥  对耿男我来说真的 非常有用 !!!

白嫖不好,创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

王采臣 | 文  【原创】

如果本篇博客有任何错误,请批评指教,不胜感激 !


文章每周持续更新,可以微信搜索「 王采臣技术交流室」第一时间阅读,希望我们一起有点东西~