加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VC异常: R6016 no enough space for thread data

(2010-11-26 15:31:13)
标签:

杂谈

分类: c

异常信息:R6016 no enough space for thread data.
异常解释:基于MSDN的解释,线程已无法从系统中获取到所需空间。
其它解释:在VS项目属性“代码生成-运行库”的选项中,没有选择MT或MD的方式,导致在运行多线程的程序时出错。
       日志处理时程序设计很重要一环。为了减少日志操作中写文件对程序正常服务造成影响,日志的写操作一般是在累计到一定数量后再异步写到文件中。当前SAN网关即是采用日志线程的方式去写文件。所有后台服务的线程,通过回调方法,抛到前台主线程,再由日志处理线程去定量写到文件中。一般过程是这样:日志消息先从0开始累计,累计到一个设定的数量值,日志线程触发写文件操作,然后再清除日志消息队列。这其中的日志消息队列,即是日志线程在内存中维持的一个日志消息列表。正常情况,写文件,清除日志消息列表,一切OK。但是,当日志文件写入的时候,如果写入操作失败,除了抛出错误,应该要及时清除队列中的消息。当前SAN网关在处理这个情况的时候,异常消息是有抛出,但是队列中的消息却没有正常清除。以至于,当磁盘空间塞满后,日志无法再写入文件,日志消息大量缓存与内存中,导致一段时间后内存被耗尽,程序崩溃的严重后果!
经验教训
异步方式处理日志,是一个好的日志解决方案,但是同样要注意到,缓存中的日志数量控制,如果不设置上限,导致内存肆意增长,在一些极端的情况下,会出现内存耗尽的的异常。在涉及到内存中的缓存队列的问题是,队列数量问题,是一个值得考虑的问题。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有