性能测试的实施及结果分析:
首先就是测试场景的设定,主要就是对于系统各个功能在使用中他们并发所占比例进行设置,在跑单场景过程当中,先要进行递增测试,然后做一个负载测试,确定系统的一个最优点。其中主要观察的就是TPS的拐点(TPS什么时候开始稳定了或者什么时候开始下降了);监控Linux系统需要关注以下几个方面:
1、 LR经过设置可以直接监控到服务器系统,然后查看系统的一个
1.安装rsh,和rsh-server两个服务包。
a. 卸载rsh
rpm –q rsh----------查看版本号
rpm -e 版本号---------卸载该版本。
B.安装
rpm –ivh rsh-0.17-14.i386.rpm rsh-server-0.17-14.i386.rpm
这两个包在我的目录下有共享。
2. 下载并安装rstatd
tar –cvf rpc.rstatd-4.0.1.tar.gz
./configure ---配置
make ---编译
make install ---安装
rpc.rstatd ---启动rstatd进程
3. 打开/etc/xinetd.conf
里面内容是:
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
includedir /etc/xinetd.d
4.重启xinetd:
A:
service xinetd reload
B:
/sbin/service xinetd rstart
5.修改/etc/xinetd.d/下的三个conf文件 rlogin ,rsh,rexec 这三个配置文件,
打这三个文件,将里面的disable = yes都改成 disable = no ( disabled 用在默认的 {} 中 禁止服务)
或是把# default: off都设置成 on ,并把“#”去掉,这个的意思就是在xinetd启动的时候默认都启动上面的三个服务!
6.启动rstatd:
rpc.rstatd
7.查看rstatd是否启动:
rpcinfo –p
如果能看到:
100001 5 udp 618 rstatd
100001 3 udp 618 rstatd
100001 2 udp 618 rstatd
100001 1 udp 618 rstatd
就说明rstatd服务已经启动。可以用LR去监视了。
LR监控linux资源详解:
http://wenku.baidu.com/view/14766b7702768e9951e7387a.html
2、 系统的CPU每秒处理任务数不能超过CPU核数*0.7
3、 Linux的一个内存管理:
每个程序在请求内存时,Linux系统都会把程序所需要用到的内存和缓存之后用到的内存全部给分配过去,在内存不够用的时候,再进行释放内存。并且内存不够用的时候,他就会拿硬盘来充当内存,只要不是拿Swap(交换区)来交换内存,就不用担心内存不够用。
具体内存管理原理:
http://www.360doc.com/content/13/0129/13/9241699_263031113.shtml
4、 Free命令和Top命令下各个参数的意义以及区别:
Free命令:
Mem:物理内存的统计
-/+ buffers/cache:物理内存缓存统计
Swap:物理交换分区使用情况
total |
Used |
Shared |
buffers |
cached |
free |
|
Mem |
物理内存总量 |
总计分配的缓存(包含buffers和cached) |
共享内存 |
分配但是未使用的buffers |
分配但是未使用的cached |
未被分配的内存,但是不代表可使用的内存 |
-/+ buffers/cache |
实际使用的内存量 |
可以使用的内存总和(包含未使用buffers和cached) |
实际使用内存总和是总计分配的缓存量去掉分配但是未使用的buffers和cached总和;
可以使用的内存总和是分配的未使用的buffers和cached和未分配的从内存总和;
Buffers和cached的关系和区别:
它们就是等于可用的内存,作用就是提高文件的读取性能,在应用程序使用内存时,它们会很快被回收。
Buffers是用来给块设备(I/O设备的一种,是指外部存储设备以块(512到32768字节之间)为计算单位)做缓冲大小,它只记录文件系统的Metadate(元数据,也就是描述数据的数据,包括数据存储位置、历史数据、资源查找和文件记录等功能)和tracking in-flight pages也就是存储目录里面有什么内容和什么权限;
Cached是用来给文件做缓冲也就是给打开过的文件和程序进行记忆;
Top命令:
mpstat -P ALL和sar -P ALL都是查看多核cpu的命令,并且也可以用sar -P ALL>a.txt来把CPU信息发送保存到文件夹a.txt中。
Top命令之后看到系统展示结果:
第一行:系统当前时间;系统持续运行时间;当前用户登录数;展示1,5,15分钟系统负载情况(这个是load average没歌五秒钟按照算法计算得出,这个值除以逻辑CPU数如果大于5,那么系统就是在高负荷运行);
第二行:Tasks任务(进程)进程数;运行有1个,休眠状态有146个;停止的有0个;僵尸状态(记录一个已经关闭进程的运行时间等运行及关闭信息)有0个;
第三行到第七行:所有逻辑cpu使用情况;us-用户空间占用cpu占比;sy-内核空间占用cpu占比;ni-改变过优先级的进程占用cpu的百分比;id-空闲cpu百分比;wa-IO等待占用cpu百分比;hi-硬中断占cpu百分比;si-软中断占cpu百分比;
第八行:物理内存总;使用内存总;空闲内存总;文件缓存内存总;
第九行:交换区内存总;使用交换区总;空闲交换区总;缓存交换区总量;
第十一行:PID-进程id;USER-进程所有者;PR-进程优先级;NI-nice值(负值表示高优先级,正值表示低优先级);VIRT-进程使用虚拟内存总;RES-进程使用未被换出的、未被换出的物理内存大小;SHR-共享内存大小;S-进程状态(D:不可中断睡眠状态、R:运行状体、S:睡眠状态、T:跟踪,停止状态、Z:僵尸进程)%CPU-上次更新到现在CPU时间占用百分比;%MEM-进程使用的物理内存百分比;TIME+ -进程使用CPU时间总和(1/100秒);COMMAND:进程名称(命令名/命令行)。
技巧:b键-打开或者关闭加亮效果;shift + >移动左右的亮条;f键可以进入到另外一个top视图对top展示内容进行编排。
通常我们还可以通过ps和netstat两个命令查看端口和连接池情况
但是综合来说,Top消耗的系统资源比较多,如果长时间使用会占用很多系统资源。
5、 关于IOSTAT命令:
IOSTAT是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。IOSTAT主要是用监控系统的一个整体的情况,不会对某个进程进行深度的分析。
命令:Iostat[操作][时间][次数]
-C是显示cpu的使用情况;-d是显示磁盘的使用情况;-k以KB为单位来显示;-m是以M为单位来展示;-N是磁盘列阵(LVM)信息;-n是显示NFS(网络文件管理系统)使用情况;-p[磁盘]是显示磁盘分区的情况;-t显示终端和CPU信息;-x是显示详细信息;-V是显示版本信息。
显示指定磁盘信息:iostat -d 磁盘名
查看TPS与吞吐量:iostat -d -k 1 1
查看设备使用率(%util)、相应时间:iostat -d -k -x
分析:
Vmstat
Await参数
Which 命令:查找命令位置。
Find 命令:find -name “filename”;里面加星号就是模糊查询。
6、 关注哪些进程在占用的资源。
注意:
1、 在做性能测试的过程中,一定要考虑到系统的一个极限的情况,就是在某个高并发情况下,系统会出现什么样的问题;
2、 在验证问题的时候一定要尽量在尽量接近生产环境的环境上进行验证;
3、 确认系统是否可以通过水平拓展的方式(加机器)来提高系统的处理事务的能力;
4、 可以看apache或者tomcat下面设置的access日志来查看服务器处理的请求,可以看tomcat的错误日志来确认发现的问题;
5、对于线程和进程的区别:一个进程包含多个线程,进程是直接来占用系统资源,但是线程是基本不占用系统资源,它只是在和其他线程在一个进程的资源中与同进程的线程互相竞争。进程是一个独立单元,但是线程是和其他线程共享一个独立单元,对于程序来说,线程是硬件驱动级别的程序,进程是系统运行的程序。没有线程的进程叫单线程,线程有时又叫轻权进程或轻量级进程,是CPU 调度的一个基本单位;
5、 TPS开始下降的原因也可能是因为压力机加压太多,是本身压力机资源不够用的原因。
6、 性能测试总体来说分三部分:
1、监控服务器资源(内存,CPU,磁盘,网络)
2、监控中间件(连接数等各种参数)使用WAS工具
3、监控数据库(连接数,慢查询sql,各种top)
7、 互联网常见架构:
1、lamp(Linux+Apache+Mysql/MariaDB+Perl/PHP/Python)
2、lnmp(Linux+Nginx+Mysql/MariaDB+Perl/PHP/Python)