前言
在这里最重要的是 一些性能指标的正确认识和分析,以及常见工具的正确使用,那可以说在性能测试方面就可以成功一半了。
测试目的:发现服务器的性能瓶颈。配置的不同能够承载的最大任务数不同,能够承载的压力也不同。
测试范围以及性能指标:CPU、内存、磁盘、网络、版本
上面五个指标里面可能版本是有点难以理解,版本会影响各个软件适配版本甚至OS本身的命令,比如CentOS7和CentOS6就是有大不同的。因为硬件版本其实大部分情况下都是不同,所以我们一定要保证软件版本一定要相同,要适配兼容。
Q:测试和生产环境的环境配置不同,这怎么办?
A:通过多次压测来计算性能损耗,得到一个可以量化的预估性能损耗计算方式,或者指标
我们一般遇到服务器承载量高,或者并发量上升之后,会采用扩充服务器的方式来缓解问题。但是这种缓解并不是线性提升的,并不是成正比的,随着扩充越多,效果是越来越低的。
目标:能够正确的区别进程和线程两者的定义和关系
进程(比较官方的说法):进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
这里简单的说:进程是可以独立运行,或者说我们可以通过服务器命令ps -ax可以直接看到的。
线程:线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小的独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源。一个线程可以创建或撤销另一个线程。
这里简单说,线程就是在进程中工作的。
定义和区别:
一个线程只能属于一个进程,但一个进程可以拥有多个线程。
线程是进程工作的最小单位。
一个进程会分配一个地址空间,进程和进程之间不共享地址空间,也就是不共享内存。
同一个进程下的不同的多个线程,共享父进程的地址空间。
线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的方法实现同步。
线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。
进程 - 优点:
每一个进程相互独立,不影响主程序的稳定性,子程序崩溃不影响其他进程。
通过增加CPU,就可以扩充性能
可以尽量减少线程加锁和解锁的影响,极大的提高了性能。
进程 - 缺点:
逻辑控制复杂,需要和主程序进行交互。
多进程调度开销大。
线程 - 优点
程序逻辑和控制方式简单
所有的线程可以直接共享内存和变量
线程方式消耗的总资源比进程少
线程 - 缺点
每个线程与主程序共用地址空间,最大内存地址受限。
线程之间的同步和加锁不易控制
一个线程的崩溃可能影响到整个程序的稳定性。
man
- Linux下函数手册命令,可以查看所有命令的使用方法
top
- 能够实时监控系统的运行状态,并且按照CPU及内存等进行排序.
-h: 帮助
-p:监控制定的进程。当监控多个进程时,进程ID以都好分割。该选项只能在命令行下使用
top任务区命令
M:按内存使用率排序
P:按CPU使用率排序
z:彩色或黑白显示
top中的load average:系统的运行队列的平均利用率,也可以认为是可运行进程的平均数。三个值分别表示在最后1分钟、5分钟、15分钟的平均负载值。
top说明:在单核CPU中load average的值为1时表示满负载状态。同理在多核CPU中满负载的load average的值是1*CPU核数。
其中部分top显示的值需要关注一下:
%Cpu(s):0.0us,0.3sy,0.0ni,99.7id,0.0wa,0.0hi,0.0si,0.0st
us: 用户空间占CPU百分比
sy:内核空间占CPU百分比
ni:用户进程空间内改变过优先级的进程占用CPU百分比
id:空闲CPU百分比
wa:等待输入输出的CPU百分比
hi:硬件中断
si:软件中断
st:实时
vmstat
- 可监控OS的进程状态、内存、虚拟内存、磁盘IO、CPU等信息。
语法:vmstat [-a] [-n] [-S unit] [delay [count]]
-S:使用制定单位显示。参数有k、K、m、M,分别代表1000,1024,1000000,1048576字节。默认单位为K(1024bytes)
vmstat 1 2 -> 实现两次,每次显示的时间间隔是1秒
free
- 能够监控系统的内存使用状态。
total:总计物理内存容量大小
Used:已使用的内存容量大小
Free:未使用的内存容量大小
shared:多个进程共享的内存容量总额
buffers/cached:磁盘缓存的容量大小
-h:可以简化单位
mpstat
- 可以查看多核型CPU中每个计算核心的统计数据。
语法: mpstat [-P {|ALL}] [internal [count]]
参数:
-P {|ALL} 表示监控哪个CPU,cpu在[0, cpu数量-1]中取值,不加默认是all所有。
internal - 相邻的两次采样的间隔时间
count - 采样的次数,count只能和delay一起使用
注意事项:
当没有参数时,mpstat则显示系统启动以后所有信息的平均值。
有interval时,第一行的信息自系统启动以来的平均信息。从第二行开始,输出为前一个interval时间段的平均信息。
mpstat并不是系统自带的,所以需要先装相应相应依赖。
centos:yum install -y sysstat
ubuntu: apt-get install -y sysstat
netstat
- 用于显示本集网络连接、运行端口、路由表等等信息
参数:
-n:拒绝显示别名,能显示数字的全部转化成数字
-l:仅列出有在Listen监听状态的
-p:显示建立相关连接的程序名
-t:仅显示TCP相关的选项
-u:仅显示UDP相关选项
-i:显示自动匹配接口的信息
-c:每隔一个固定的时间,执行改netstat命令
注意事项:
在查看网络的时候最好加上后面参数,不然太多了。
后面加参数可以连加,比如 netstat -ntlp
常用组合 netstat -i , netstat -ntlp
iostat
- 对系统磁盘IO操作进行监控,它的输出主要显示磁盘的读写操作的操作信息。同时给出cpu的使用情况。
重要参数:
-x device 输出指定要统计的磁盘设备名称,默认为所有磁盘设备。
万能命令 sar - System Activity Report 系统活动情况报告 是 目前Linux比较全面的系统性能分析工具之一,可以从多方面进行报告。
sar的性能监控范围
文件读写情况、系统调度的使用情况、磁盘IO、CPU效率、内存使用状况、进程活动及IPC有关的活动等
sar语法: sar [options] [-A] [-o file] t [n]
在命令行中,n和t两个参数组合起来定义采样间隔和次数
t为采样间隔,是必须有的参数
n为采样次数,是可选参数,默认值是1
-o file表示将命令结果以二进制格式存放在文件中,file在此处不是关键字,是文件名
options为命令行选项
sar选项
-A :所有报告的总和
-u:CPU利用率
-v:进程、节点、文件和锁表状态
-r:显示系统内存的使用情况
-B:内存分页情况
-b:缓冲区使用情况
strace
- 集 诊断、调试、统计与一体的工具,我们可以使用strace对应用的系统调用和信息传递的跟踪结果来对应用进行分析,以达到解决问题或者是了解应用工作过程的目的。
strace选项
-p:追踪指定的进程
-f:跟踪有fork子进程系统调用
-c:统计每一系统调用的所执行的时间,次数和出错次数等等
-t:在输出中的每一行前加上时间信息。 -tt 时间确定到微秒级。
-e expr:输出过滤器,通过表达式,可以过滤掉你不想要输出的东西
-o filename:默认strace将结果输出到stdout。通过-o可以将输出写入到filename文件中。
简单示例:
strace -ff -F -t -o zkstart1.log ./zkServer.sh start 跟踪启动zk
nmon是一种在Linux系统上广泛使用的监控与分析工具,nmon所记录的信息是比较全面的,它能在系统运行过程中实时地捕捉系统资源的使用情况,并且能输出结果到文件中,然后听过nmon_analyzer工具生产数据文件与图形化结果。
nmon下载与安装:
wget http://sourceforge.net/projects/nmon/files/nmon_linux_14i.tar.gz
tar gxvf nmon_linux_14i.tar.gz
mv nmon_x86_64_centos6 nmon (此处就是修改文件名)
cp nmon /usr/bin/
nmon用法
-f 这是nmon必选参数,并且必须放在第一个,就是输出文件的意思;用该参数的话说,nmon输出的文件名就是默认名称:hostname_date_time.nmon;
-F 这个参数和-f相同,只不过用户可以自己定义文件名称
-s 采集数据评率,也就是保存数据的频率
-c 采集数据次数
-t 输出最消耗资源的进程数据;
-h 查看帮助;
简单示例:
nmon -f -F demo.nmon -s 1 -c 10 -t
nmon_analyzer
nmon_analyzer的作用就是分析nmon数据采集后的结果,nmon analyser需要借助Excel的宏,WPS默认没有安装宏,需要下载插件。
sz demo.nmon - 下载nmon文件
然后用Excel进行打开
nmon_analyzer重点sheet
DGBUSY - 磁盘组每个hdisk设备平均占用情况;
DGREAD - 每个磁盘组的平均读情况;
DGSIZE - 每个磁盘组的平均读写情况;
DGWRITE - 每个磁盘组的平均写情况;
DGXFER - 每个磁盘组的I/O每秒操作;
MEM - 内存相关的主要信息,使用、空闲内存大小等
NET - 显示系统中每个网络适配器的数据传输速率(千字节/秒)
PAGE - 本sheet统计相关页信息的记录
crontab
Linux系统是cron这个系统服务来控制的。Linux系统上包含很多的计划性工作。使用者自己也可以设置计划任务,所以Linux系统提供了使用者控制计划任务的命令。
crontab的启动
/sbin/service crond status 查看定时任务的服务是否启动
start 、stop、restart - 启动服务、通知服务、重新启动服务
reload - 重新载入配置
crontab服务权限
crontab的权限管理存储在cron.allow文件与cron.deny文件中。如果没有可创建etc目录下。
cron.allow文件存储的是允许哪些用户使用crontab
cron.deny文件存储的是不允许哪些用户使用crontab
crontab使用场景说明
当两个文件都不存在时,那么只允许root用户使用crontab
当cron.allow文件存在,而cron.deny文件不存在时,那么只允许cron.allow文件中的用户使用crontab
当corn.deny文件存在,而cron.allow文件不存在时,那么只要是没有在cron.deny文件中的用户都可以使用crontab
如果两个文件都存在,而一个用户在两个文件中都有,那么以cron.allow文件中的为准,只要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的符号说明
*表示取值范围的所有值
/ 代表每的意思
-代表从某个数字到某个数字
,分隔开几个不同的数字
简单示例:
*/1 * * * * nmon -f -F /data/nmonData/demo1.nmon -s 1 -c 10