我所理解的性能测试是什么?
作者:网络转载 发布时间:[ 2013/3/27 13:05:20 ] 推荐标签:
当CPU 开销更多的时间在system mode,那说明已经超负荷并且应该尝试重新调度优先级
当I/O 处理得到增长,CPU 范畴的应用处理将受到影响
ps:对于JAVA应用,CPU瓶颈可以通过jprofiler监控分析
内存瓶颈:
1.查看利用率(free)
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
2.查看页交换,swap交换(po,pi,so,si),磁盘IO(vmstat)
si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小
page in :分页(Page)从磁盘重新回到内存的过程被称作Page-In
page out : 分页(Page)写入磁盘的过程被称作Page-Out
另外在进行页交换的时候,会产生磁盘IO,还需注意bi,bo
Bo 磁盘块页面从内存到文件或交换设备的总额
Bi 磁盘块页面从文件或交换设备到内存的总额
3.page fault(pidstat -r,sar -B )
minflt/s: 每秒次缺页错误次数(minor page faults),次缺页错误次数意即虚拟内存地址映射成物理内存地址产生的page fault次数
majflt/s: 每秒主缺页错误次数(major page faults),当虚拟内存地址映射成物理内存地址时,相应的page在swap中,这样的page fault为major page fault,一般在内存使用紧张时产生
其中sar -B中fault/s表示每秒钟minflt,majflt的和。
结论:
监控虚拟内存性能由以下几个部分组成:
1.当系统中出现较少的页错误,获得好的响应时间,是因为memory caches(译注:内存高速缓存)比disk caches更快(译注:磁盘高速缓存).
2.较少的空闲内存,是件好事情,那意味着缓存的使用更有效率.除非在不断的写入swap device和disk.
3.如果系统不断报告,swap device总是繁忙中,那意味着内存已经不足,需要升级了.
zee:
如果用做缓冲区(buff)和快速缓存(Cache)的物理内存不断地增加,而空闲的物理内存(free)不断地减少,证明系统中运行的进程正在不断地消耗物理内存。
已经使用的虚拟内存(swpd)不断增加,而且存在着大量的页面交换(si和so),证明物理内存已经不能满足系统需求,系统必须把物理内存的页面交换到磁盘中去。
由此可以得到这样的结论:该主机上的物理内存已经不能满足系统运行的需要,内存已成为该系统性能的一个瓶颈。
ps:对于java程序,内存瓶颈可以通过heap dump后使用mat分析
磁盘瓶颈:
iostat查看IO信息。如果 %util 接近 ,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。
另外还需要注意iowait这个值,iowait 值高意味着磁盘缓慢或负载过大。还有不要信任svctm这个字段。
监控swap 和系统分区,要确保virtual memory不是文件系统I/O 的瓶颈.
ps:磁盘瓶颈可以通过pidstat -d 定位程序
2.如何理解CPU、内存、磁盘的关系?
这些子系统之间关系是彼此联系,相互彼此依赖的
1.对于进程来说,数据是存放在内存中的,进程的运行需要使用CPU,进程读写数据需要跟磁盘打交道。
2.当内存不足时需要跟磁盘进行页(page)交换,swap交换,从而产生磁盘IO。po,so释放物理内存,pi,si增加物理内存使用。交换分页的过程需要占用cpu时间。 (内存占用过高)
3.当磁盘IO负载过高时,需要监控swap和系统分区,要确保virtual memory不是文件系统I/O 的瓶颈。磁盘的相当慢的,当iowait 增长,表示CPU花费大量的时间在等待磁盘IO,此时CPU Bound的应用处理将受到影响(磁盘IO过高)
3.如何理解paging in / paging out ?
在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。
分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时发生了分页错误(Page Fault)。
当系统内核发现可运行内存变少时,会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。
可以通过vmstat -s 查看 paged in/out 数量
4.如何监控操作系统的资源?(可用一个操作系统做例子)
(把简历上部分内容直接贴出来了,懒的整理了)
CPU监控:top(利用率), uptime(运行队列数), vmstat(上下文切换数), jprofile(方法占用cpu时间百分比)
内存监控:top, free(利用率), vmstat(page和swap交换), pidstat -r和sar -B(page fault), jmap -heap(堆dump), mat和jprofiler(查看对象)
磁盘监控:iostat(%util), top(iowait%), pidstat -d
网络监控:netstat(连接数), nethogs(流量), wireshark和tcpdump(抓包)
JVM监控:jstat(gc), jmap(堆dump), jstack(线程dump), jprofiler和visualvm(剖析工具)
nmon(长时间全局收集数据)
5.如何理解内存管理和线程调度?(可用一个操作系统做例子)
不会
6.如何理解上下文切换(context switch)?(可用一个操作系统做例子)
每个CPU(或多核CPU中每个核心)在同一时间只能执行一个线程,Linux采用抢占式调度。即为每个线程分配一定的执行时间,当到达执行时间,线程中有IO阻塞或高优先级线程要执行时,Linux将切换执行的线程,在切换时要存储目前线程的执行状态,并恢复要执行的线程状态,这个过程称之为上下文切换。对于java应用,典型的是在进行文件IO操作,网络IO操作,锁等待或线程sleep时,当前线程会进入阻塞或者休眠状态,从而触发上下文切换,上下文切换过多会造成内核占用过多的CPU使用,使得应用的响应速度下降。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11