设为首页收藏本站

ZMX - IT技术交流论坛 - 无限Perfect,追求梦想 - itzmx.com

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 387|回复: 0

C语言写的Linux web软件好像都有个内存泄漏的通病,比如kangle连接数占用不释放内存空间,避免进程重新申请优化

[复制链接]
 成长值: 468

签到天数: 4781 天

[LV.Master]伴坛终老

发表于 2024/12/5 00:11 | 显示全部楼层 |阅读模式 |Google Chrome 131.0.0.0|Windows 10
天涯海角搜一下: 百度 谷歌 360 搜狗 有道 雅虎 必应 即刻
C语言写的Linux web软件好像都有个内存泄漏的通病,比如kangle连接数占用不释放内存空间,避免进程重新申请优化

还有就是kangle有没有办法释放下内存,没开缓存功能也会占用上1G的进程内存,然后甚至还跑进去swap里。反而其它web软件就很稳,同样的每秒100并发左右访问量情况下只要10-20MB内存占用,这些内存应该是内核建立TCP连接是内核吃的,而不是发生在进程上,你想办法弄个快照文件看看是什么在吃内存?弄个计时器每5分钟释放一下,或者直接用完立即释放不要积累避免内存泄漏,现在kangle就是根据访问量连接数吃了内存,然后永远不释放,这样导致1G内存的vps想开内存缓存都不好开,因为kangle自身要吃掉1G,没有空闲内存去做缓存了,还是说这是C语言通病,避免进程重新申请连接数需要的内存空间
看了下nginx也是c语言,就很稳占用内存就10M,就是有很多工作进程,所以这一定是发生在kangle上的问题吧


帖子补充
C语言写的Linux内核软件好像都有个内存泄漏的通病,建立TCP后不进行垃圾回收,也就是对应正在发起和被动接收的最大历史产生的连接数峰值,可以弄个计时器每5分钟释放一下,或者直接用完立即释放不要积累避免内存泄漏
其实这个内存占用也不能说是泄漏,是为了避免后续建立连接的时候重复去申请内存空间,也算是一种常驻内存的优化技术,避免进程重新申请连接数需要的内存空间
也算是一种常驻内存的优化技术,占用最大历史产生的连接数峰值内存避免重新申请
C语言对于申请连接数默认不释放内存的,对于频繁建立连接的web软件特别有效,比如说opentracker,nginx等等,不信你把防火墙堵了端口,,,然后等用户列表变成0,你看进程内存还在那,这种做法应该是避免内存碎片,频繁申请内存空间
我觉得对于比特彗星Linux版可以加一个计时器去每5分钟释放一次,毕竟transmission之类其它BT软件都有自动释放内存
一般来说每个tcp页默认情况下申请占用100KB内存空间,tcp_rmem+tcp_wmem,在系统内核内存紧张的时候会缩小为8KB,并且上限值是tcp_mem页控制,也就是44262x100K=4.3GB内存(最紧张情况下为44262x8K=345MB),不会出现占用到1TB内存的现象

关联:https://bbs.itzmx.com/thread-106743-1-1.html

欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册论坛 新浪微博账号登陆用百度帐号登录

本版积分规则

手机版|Archiver|Mail me|网站地图|IT技术交流论坛 ( 闽ICP备13013206号-7 )

GMT+8, 2025/2/5 16:46 , Processed in 0.126090 second(s), 20 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

快速回复 返回顶部 返回列表