一种服务程序线程管理方法技术

技术编号:11914557 阅读:91 留言:0更新日期:2015-08-20 17:55
一种服务程序线程管理方法,在服务器中创建一个作为父线程的控制线程,该控制线程创建客户端的子线程、监控所有子线程的运行状态、以及回收非正常子线程。本发明专利技术可以有效检测非正常的客户端连接,结束这些客户端的子线程,从而释放服务器资源,在不提高硬件成本的基础上提高服务质量。

【技术实现步骤摘要】

本专利技术涉及。
技术介绍
随着互联网技术的发展,服务器的作用越来越大,服务端程序的性能要求也越来越高。现在的服务器需要同时服务很多的客户端,为了提高服务器的服务能力,可以从硬件方面着手,也可以从软件方面着手,如果采用硬件方法的话,就是提升硬件的性能,比如:增加服务器的内存、采用更好的CPU和磁盘等,但是成本太高,代价太大,从软件方面的话,手段就更加丰富了,可以采用多线程、多进程、还可以优化算法等,最方便快捷的方式是采用多线程的方式,即每次有客户端请求,就创建一个新的线程与其通信。这样在客户端的数量不是特别大的情况下,可以有效提供服务,但是每个服务器都会有最大的服务能力,当客户端的数量超过一定限度的时候,由于创建的线程过多,系统无法及时调度太多的线程,会导致服务器对客户端的相应速度太慢,通常还会有很多的不活跃的客户端,一般是用户忘记关闭客户端程序,导致客户端程序始终连接着服务器,占用着资源,使得所有客户端的服务质量都得不到保证,服务质量就会下降。
技术实现思路
本专利技术提供,可以有效检测非正常的客户端连接,结束这些客户端的子线程,从而释放服务器资源,在不提高硬件成本的基础上提高服务质量。为了达到上述目的,本专利技术提供,在服务器中创建一个作为父线程的控制线程,该控制线程创建客户端的子线程、监控所有子线程的运行状态、以及回收非正常子线程。当子线程的数量超过了系统能够处理的最大客户端接入量时,控制线程停止创建新的子线程; 所述的非正常子线程包含:CPU利用率超过阈值的子线程、内存使用量超过阈值的子线程、以及状态切换频率为零的子线程。控制线程建立子线程状态表,将新建的子线程的状态添加到子线程状态表中。所述的子线程状态表包含子线程的CPU利用率、子线程的内存使用量、子线程的当前状态、子线程的状态切换次数值和子线程的状态切换频率。所述的子线程的当前状态包含:运行、挂起、睡眠、阻塞、终止。控制线程通过系统调用接口获取子线程的CPU利用率和子线程的内存使用量,每一个子线程在进行状态切换后,都会更新该子线程在子线程状态表中所对应的子线程的当前状态和子线程的状态切换次数值,控制线程根据子线程在单位时间内的状态切换次数值去计算出子线程的状态切换频率。所述的系统能够处理的最大客户端接入量是由测试得到的数据。所述的控制线程创建一个定时器线程,该定时器线程设定轮询时间,用于控制线程定时轮询子线程状态表。所述的CPU利用率的阈值为5%,所述的内存使用量的阈值为5%。本专利技术可以有效检测非正常的客户端连接,结束这些客户端的子线程,从而释放服务器资源,在不提高硬件成本的基础上提高服务质量。【附图说明】图1是本专利技术的一个实施例的流程图。【具体实施方式】以下根据图1,具体说明本专利技术的较佳实施例。如图1所示,本专利技术提供,包含以下步骤: 步骤S1、在服务器中创建一个控制线程,控制线程初始化子线程状态表,计算系统的最大内存和系统能够处理的最大客户端接入量; 所述的子线程状态表包含子线程的CPU利用率、子线程的内存使用量、子线程的当前状态、子线程的状态切换次数值和子线程的状态切换频率; 所述的子线程是由控制线程创建的,每一个子线程在进行状态切换后,都会更新该子线程在子线程状态表中所对应的当前状态(子线程的当前状态包含:运行、挂起、睡眠、阻塞、终止)和状态切换次数值,控制线程通过系统调用接口获取子线程的CPU利用率和子线程的内存使用量,控制线程根据子线程的状态切换次数值去计算出子线程的状态切换频率(比如在I个小时内,状态切换次数有5次,则该子线程的状态切换频率为5次/每小时);所述的系统能够处理的最大客户端接入量是由测试得到的数据,该数据保存在系统的数据库中或者配置文件中; 步骤S2、控制线程创建一个定时器线程; 该定时器线程设定轮询时间,用于定时轮询子线程状态表; 步骤S3、控制线程判断是否收到客户端接入请求,如果是,进行步骤S4 ; 步骤S4、控制线程判断接入系统的客户端数量是否大于最大客户端接入量,如果是,进行步骤S5,如果否,进行步骤S6 ; 步骤S5、控制线程拒绝该客户端接入请求,进行步骤S3 ; 步骤S6、控制线程创建服务于客户端的子线程,更新子线程状态表,将新建的子线程的状态添加到子线程状态表中,进行步骤S7 ; 步骤S7、控制线程判断是否达到了轮询时间,如果是,进行步骤S8,如果否,进行步骤S3 ; 步骤S8、控制线程轮询子线程状态表,判断所有子线程的状态,结束非正常子线程,维持正常子线程,进行步骤S3; 所述的非正常子线程包含:子线程的CPU利用率超过阈值,或者子线程的内存使用量超过阈值,或者子线程的状态切换频率为零; 子线程的CPU利用率不能超过总性能的5%,因此CPU利用率的阈值为5% ; 子线程的内存使用量也不能超过5%,因此内存使用量的阈值为5% ; 如果一个子线程被创建后,其CPU利用率和内存使用量很高,超出了正常的客户端的请求率,控制线程会认为该客户端是不法客户端,可能是在攻击服务器,消耗服务器资源,服务器的控制线程会将该子线程回收;或者一个子线程被创建后,其状态切换频率在某个一时间段后为零,则认为该客户端已经不活跃了,则服务器的控制线程会释放连接,也回收该子线程; 所述的正常子线程包含:除了非正常子线程之外的其他子线程。本专利技术可以有效检测非正常的客户端连接,结束这些客户端的子线程,从而释放服务器资源,在不提高硬件成本的基础上提高服务质量。尽管本专利技术的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本专利技术的限制。在本领域技术人员阅读了上述内容后,对于本专利技术的多种修改和替代都将是显而易见的。因此,本专利技术的保护范围应由所附的权利要求来限定。【主权项】1.,其特征在于,在服务器中创建一个作为父线程的控制线程,该控制线程创建客户端的子线程、监控所有子线程的运行状态、以及回收非正常子线程; 当子线程的数量超过了系统能够处理的最大客户端接入量时,控制线程停止创建新的子线程; 所述的非正常子线程包含:CPU利用率超过阈值的子线程、内存使用量超过阈值的子线程、以及状态切换频率为零的子线程。2.如权利要求1所述的服务程序线程管理方法,其特征在于,控制线程建立子线程状态表,将新建的子线程的状态添加到子线程状态表中。3.如权利要求2所述的服务程序线程管理方法,其特征在于,所述的子线程状态表包含子线程的CPU利用率、子线程的内存使用量、子线程的当前状态、子线程的状态切换次数值和子线程的状态切换频率。4.如权利要求3所述的服务程序线程管理方法,其特征在于,所述的子线程的当前状态包含:运行、挂起、睡眠、阻塞、终止。5.如权利要求3所述的服务程序线程管理方法,其特征在于,控制线程通过系统调用接口获取子线程的CPU利用率和子线程的内存使用量,每一个子线程在进行状态切换后,都会更新该子线程在子线程状态表中所对应的子线程的当前状态和子线程的状态切换次数值,控制线程根据子线程在单位时间内的状态切换次数值去计算出子线程的状态切换频率。6.如权利要求1所述的服务程序线程管理方法,其特征在于,所述的系统能够处理的最大客户端接入量是由测试得到的数据。7.如权利要求5所述的服务程序线程管本文档来自技高网...

【技术保护点】
一种服务程序线程管理方法,其特征在于,在服务器中创建一个作为父线程的控制线程,该控制线程创建客户端的子线程、监控所有子线程的运行状态、以及回收非正常子线程;当子线程的数量超过了系统能够处理的最大客户端接入量时,控制线程停止创建新的子线程;所述的非正常子线程包含:CPU利用率超过阈值的子线程、内存使用量超过阈值的子线程、以及状态切换频率为零的子线程。

【技术特征摘要】

【专利技术属性】
技术研发人员:张伟
申请(专利权)人:上海斐讯数据通信技术有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1