针对处理器个数和队列长度之间关系研究手稿(1)



本片文章是在性能测试过程中,就发现单线程CPU过高,造成系统卡顿,进行的研究,这篇文章查阅很多网上资料和百度百科中的知识汇编而成。

PDF下载链接:链接: http://pan.baidu.com/s/1slKQeL3 密码: mjng

处理器个数和队列长度之间关系

1 WindowsUNIX

1.1 线程和SMP

Windows的两个重要特征是支持线程和支持对称多处理(SMP),windows支持线程和SMP的下列特征:

  • 操作系统例程可以在任何可以得到的处理器上运行,不同的例程可以在不同的处理器上同时执行。

  • Windows支持在单个进程的执行中使用多个线程。同一个进程可以在不同的处理器上同时执行。

  • 服务器进程可以使用多线程,以处理多个用户同时发出的请求。

  • Windows提供在进程间共享数据和资源的机制以及灵活的进程间通信能力。

1.2 进程和进程控制块

进程以下几个定义:

  • 正在执行的程序

  • 正在计算机上执行的程序实例

  • 能分配给处理器并由处理器执行的实体

  • 具有以下特征的活动单元:一组指令序列的执行、一个当前状态和相关的系统资源集。

也可以把进程当成一组元素组成的实体,进程的两个基本的元素是程序代码和代码相关联的数据集。假设处理器开始执行这个程序代码,且我们把这个执行实体叫进程。在进程执行时,任意一个给定时间,进程都可以唯一地被表征为以下元素:

  • 标识符:跟这个进程相关的唯一标识符,用来区别其他进程。

  • 状态:如果进程正在执行,那么进程处于运行状态

  • 优先级:相对于其他进程的优先级

  • 程序计数器:程序中即将被执行的下一条指令的地址

  • 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享内存块的指针。

  • 上下文数据:进程执行时处理器的寄存器中的数据

  • I/O状态信息:包括显示的I/O请求、分配给进行的I/O设备(例如磁带驱动器)和被进程使用的文件列表等。

  • 记账信息:可能包括处理器时间总和、使用的时钟数总和、时间限制、记账号等。

上述的列表信息存放字进程控制块中(如图3.1所示)的数据结构中,该控制块由操作系统创建和管理。

比较有意义的一点是,进程控制块包含了充分的信息,这样就可以中断一个进程的执行,并且在后来恢复执行进程时就好像进程未被中断过。进程控制块时操作系统能够支持多进程和提供多处理的关键工具。当进程被中断时,操作系统会把程序计数器和处理器寄存器(上下文数据)保存到进程控制块中的相应位置,进程状态也被改变为其他的值,例如阻塞态或就绪态。现在操作系统可以自由地把其他进程设置为运行态,其他进程的程序计数器和进程上下文数据加载到处理器寄存器中,这样其他进程就可以开始执行了。

因此,可以说进程是由程序代码和相关数据还有进程控制块组成。对于一个单处理器计算机,在任何时间都最多只有一个进程在执行,正在执行的这个进程的状态位运行态。


 

2 处理器性能计数指标

2.1 Windows处理器分析方法

处理器(CPU)也可能是系统的瓶颈,如下是针对处理器进行分析的步骤:

  1. 查看System\%Total Processor Time性能计数器的计数值

    该计数值用于体现服务器整体的处理器使用率,对多处理器系统来说,该值体现了所有CPU的平均使用率。该值的数值持续超过90%,则说明整个系统面临着处理器方面的瓶颈,需要通过增加处理器来提高性能。

    PS:由于操作系统本身的特性,在某些多CPU系统中,该数据本身并不大,但若CPU之间的负载情况极为不均衡,也应该视作系统产生了处理器方面的瓶颈。

  2. 查看每个CPUProcessor\%ProcessorTimeProcessor\%UserTimesProcessor\%PrivilegedTime

    Processor\%User Time是指系统的非核心操作系统消耗的CPU时间,如果该值较大,可以考虑是否通过算法优化等方法来降低该值。如果该服务器是数据库服务器,Processor\%User Time值大的原因很可能是数据库的排序或函数操作消耗了过多的CPU时间,此时可以考虑对数据库系统进行优化。

  3. 研究系统处理器瓶颈

    查看System\Processor Queue Length计数器的值,当该计数器的值大于CPU数量的总数加1,说明处理器阻塞。处理器的%Process Time值很高时,一般都伴随着处理器阻塞,但产生处理器阻塞时,Processor\%Process Time计数器的值并不一定很大,此时就需要查看处理器阻塞的原因。

%DPC Time该值越低越好,在多处理器系统中,如果该值大于50%并且Processor\%Process Time值非常高,则考虑加入一个网卡来提高性能。

2.2 Linux/UNIX处理器分析方法

处理器(CPU)也可能是系统的瓶颈,如下是针对处理器进行分析的步骤:

  1. 查看Processor\%Idle Time性能计数器的值

    该计数器描述的是CPU总的空闲时间。如果该值持续低于10%,表明瓶颈是CPU。可以考增加一个处理器或换一个更快的处理器。PS:该计数器的值可以通过top命令输出结果。

   2.查看Processor\%User Time System\%User TimeSystem\CPU context switches

           Processor\%User Time是指系统非内核操作消耗的CPU时间。一般来说如果系统中使用了大量的算法和复杂的计算操作,该值会比较大。System\%User Time系统上所有处理器执行非内核操作的平均时间的百分比,该值反映了用于有用作业上的时间的比率System\CPU context switchesCPU上下文切换。在vmstat的结果中显示为CS例如:CPU 100利用率,那么应该到达这样一个平衡:65%-70 User Time30%-35 System Time0%-5 Idle Time;大量的上下文切换是可以接受的。PS:查看processor信息用top命令,systemvmstat应用

    3.可运行队列

     每个可运行队列不应该超过1-3个线程(每处理器)。 

    PS:Vmstat中一些参数介绍:

        r,可运行队列的线程数,这些线程都是可运行状态,只不过 CPU暂时不可用;

        b,被 blocked的进程数,正在等待 IO请求;

        in,被处理过的中断数

        cs,系统上正在做上下文切换的数目

        us,用户占用 CPU的百分比

        sys,内核和中断占用 CPU的百分比

        wa,所有可运行的线程被blocked以后都在等待 IO,这时候 CPU空闲的百分比

        idCPU完全空闲的百分比

        PS:mpstat输出多个处理器数据:

        CPU使用率过高的进程中的所有线程进行排序的命令:

         ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |grep xxx


 

3单线程CPU过高原因分析

3.1 死循环

        所谓的死循环是无法靠自身的控制总之的循环。死循环我有将它分为:编程死循环、页面死循环、多模块产生的死循环、假死循环。

3.1.1编程死循环

例如在C语言程序中,语句“while(1)printf("*")就是一个死循环,运行它将无休止地打印*号。不存在一种算法,对任何一个程序及相应的输入数据,都可以判断是否会出现死循环。因此,任何编译系统都不做死循环检查。在设计程序时,若遇到死循环,我们可以通过按下Ctrl+Pause/Break的方法,结束死循环。

然而,在编程中死循环并不是一个需要避免的问题,相反,在实际应用中,经常需要用到死循环。例如,我们使用的Windows操作系统下的窗口程序中的窗口都是通过一个叫消息循环的死循环实现的。在单片机、嵌入式编程中也经常要用到死循环。在各类编程语言中,死循环都有多种实现的方法,以C语言为例,可分别使用while.for,goto实现。

死循环的C语言实现:

1while(1);

2for(;;);

3goto

Loop:

...

goto Loop;

3.1.2页面死循环

在网站页面设计当中,导航的设计不可忽视。导航的作用除了给用户寻找相关信息文字性的提示以外。也是增加此页面链接其他页面的入口。如果此页面的导航点击进入时链接地址还是本页面,就会造成死循环。页面死循环不利于网站以及网页的优化。

死循环在系统的应用非常多,也非常重要,所有的应用系统都需要设置一个死循环来保证系统的正常运行,如果没有死循环,那么你会一开机马上就关机,因为这个程序已经运行完毕,所以在系统开发中死循环有着极其重要的作用!

3.1.3死循环举例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WEL测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值