首页 > 其他 > 详细

再谈kbmMW垃圾回收

时间:2018-08-05 20:15:59      阅读:129      评论:0      收藏:0      [点我收藏+]

很早就写了关于kbmMW Server如何实现的垃圾回收,但最近一段时间还是为此遇到问题,实现的Server不能稳定运行,并因此不能响应客户端的查询请求,只能重启Server。这是让人最头的问题,还好,今天终于搞定。

先复习一下早前写过的资料,回顾一下何为kbmMWServer的垃圾回收及实现机制,然后再看我遇到的具体问题。

kbmMWServer垃圾回收处理机制(一)

kbmMWServer垃圾回收处理机制(二)

kbmMWServer垃圾回收处理机制(三)

 总结前文,kbmMWServer通过两个属性来控制是否做垃圾回收及定时回收垃圾的时间间隔:

GarbageCollection:是否做垃圾回收

GarbageInterval:回收垃圾的时间间隔,单位是秒

这里的垃圾,是指Service实例。

当客户端发来一个请求时,kbmMWServer会取得一个对应的Service实例来处理该请求,在服务端,kbmMWServer通过池(Pool)来管理Service实例,随着客户端的不断请求及服务端的响应,会在Service实例池中产生多个Service实例,当客户端的请求数量降下来,或者极端的说长时间没有了客户端的请求,那么在服务端的Service实例池中就会有多个不用的实例,因此需要定时的清理、删除,以节省服务器资源。

更具体的说,到底什么样的Service实例需要视为垃圾来清理呢?还是通过代码来说更为明确,找到TkbmMWServiceDefinition类的实现,下面几个属性决定Service实例是否被回收:

  TkbmMWServiceDefinition = class(TkbmMWCustomServiceDefinition)
  public
     ...
     property MinCount;//服务端保留的最小Service实例数,小等于这个数时,Service实例不被回收
     property MaxIdleTime;//一个Service实例最大的空闲时间,当超过这个时间时,将被回收
     property MaxIdleStatefulTime;//一个有状态的Service实例最大的空闲时间,当超过这个时间时,将被回收
     property Timeout;//一个Service实例执行时的超时时间,当正在执行时超过这个时间,将被回收
     ...
  end;

 当开发者不设置这几个属性,也就是默认情况下:

MinCount为-1,表示在服务端不保留Service实例,所有的Service实例都将做回收处理

MaxIdleTime为0,表示没有空闲的时间,Service实例不会因此而被回收

MaxIdleStatefulTime为0:有状态的Service实例,没有空闲时间,不会因此而被回收

Timeout为0,一个Service实例没有超时时间,不会因此而被回收

 

再谈kbmMW垃圾回收

原文:https://www.cnblogs.com/kinglandsoft/p/9426815.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!