设为首页收藏本站

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

 找回密码
 注册论坛

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

用百度帐号登录

只需两步,快速登录

搜索
查看: 1310|回复: 0

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

[复制链接]
 成长值: 207

签到天数: 5055 天

[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

反正内存泄漏点位在这里
7fcacfe00000-7fcb16e00000 rw-p 00000000 00:00 0
Size:            1163264 kB
Rss:              256548 kB
Pss:              256548 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:     14752 kB
Private_Dirty:    241796 kB
Referenced:       128904 kB
Anonymous:        256548 kB
AnonHugePages:         0 kB
Swap:             219420 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB
VmFlags: rd wr mr mp me nr sd
7fcb16e43000-7fcb27743000 rw-p 00000000 00:00 0
Size:             271360 kB
Rss:              170944 kB
Pss:              170944 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:      3716 kB
Private_Dirty:    167228 kB
Referenced:        68516 kB
Anonymous:        170944 kB
AnonHugePages:         0 kB
Swap:             100412 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB
Locked:                0 kB
VmFlags: rd wr mr mp me nr sd

(gdb) info proc mappings
process 1146
Mapped address spaces:

          Start Addr           End Addr       Size     Offset objfile
            0x400000           0xa7c000   0x67c000        0x0 /vhs/kangle/bin/kangle
            0xc7c000           0xcb4000    0x38000   0x67c000 /vhs/kangle/bin/kangle
            0xcb4000           0xcbf000     0xb000   0x6b4000 /vhs/kangle/bin/kangle
            0xcbf000           0xf10000   0x251000        0x0
      0x7fcabf5ff000     0x7fcacf5ff000 0x10000000        0x0
      0x7fcacf5ff000     0x7fcacf600000     0x1000        0x0
      0x7fcacf600000     0x7fcacfe00000   0x800000        0x0
      0x7fcacfe00000     0x7fcb16e00000 0x47000000        0x0
      0x7fcb16e43000     0x7fcb27743000 0x10900000        0x0
      0x7fcb27743000     0x7fcb2774f000     0xc000        0x0 /usr/lib64/libnss_files-2.17.so
      0x7fcb2774f000     0x7fcb2794e000   0x1ff000     0xc000 /usr/lib64/libnss_files-2.17.so
      0x7fcb2794e000     0x7fcb2794f000     0x1000     0xb000 /usr/lib64/libnss_files-2.17.so
      0x7fcb2794f000     0x7fcb27950000     0x1000     0xc000 /usr/lib64/libnss_files-2.17.so
      0x7fcb27950000     0x7fcb27956000     0x6000        0x0
      0x7fcb27956000     0x7fcb27957000     0x1000        0x0
      0x7fcb27957000     0x7fcb28157000   0x800000        0x0
      0x7fcb28157000     0x7fcb28158000     0x1000        0x0
      0x7fcb28158000     0x7fcb28958000   0x800000        0x0
      0x7fcb28958000     0x7fcb28959000     0x1000        0x0
      0x7fcb28959000     0x7fcb29159000   0x800000        0x0
      0x7fcb29159000     0x7fcb2916e000    0x15000        0x0 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
      0x7fcb2916e000     0x7fcb2936d000   0x1ff000    0x15000 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
      0x7fcb2936d000     0x7fcb2936e000     0x1000    0x14000 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
      0x7fcb2936e000     0x7fcb2936f000     0x1000    0x15000 /usr/lib64/libgcc_s-4.8.5-20150702.so.1
      0x7fcb2936f000     0x7fcb29458000    0xe9000        0x0 /usr/lib64/libstdc++.so.6.0.19
      0x7fcb29458000     0x7fcb29658000   0x200000    0xe9000 /usr/lib64/libstdc++.so.6.0.19
      0x7fcb29658000     0x7fcb29660000     0x8000    0xe9000 /usr/lib64/libstdc++.so.6.0.19
      0x7fcb29660000     0x7fcb29662000     0x2000    0xf1000 /usr/lib64/libstdc++.so.6.0.19
      0x7fcb29662000     0x7fcb29677000    0x15000        0x0
      0x7fcb29677000     0x7fcb29680000     0x9000        0x0 /vhs/kangle/bin/vhs_sqlite.so
      0x7fcb29680000     0x7fcb2987f000   0x1ff000     0x9000 /vhs/kangle/bin/vhs_sqlite.so
      0x7fcb2987f000     0x7fcb29880000     0x1000     0x8000 /vhs/kangle/bin/vhs_sqlite.so
      0x7fcb29880000     0x7fcb29881000     0x1000     0x9000 /vhs/kangle/bin/vhs_sqlite.so
      0x7fcb29881000     0x7fcb29953000    0xd2000        0x0 /vhs/kangle/bin/js.so
      0x7fcb29953000     0x7fcb29b53000   0x200000    0xd2000 /vhs/kangle/bin/js.so
      0x7fcb29b53000     0x7fcb29b59000     0x6000    0xd2000 /vhs/kangle/bin/js.so
      0x7fcb29b59000     0x7fcb29b5a000     0x1000    0xd8000 /vhs/kangle/bin/js.so
      0x7fcb29b5a000     0x7fcb29b5b000     0x1000        0x0
      0x7fcb29b5b000     0x7fcb29b64000     0x9000        0x0 /usr/lib64/libjbig.so.2.0
      0x7fcb29b64000     0x7fcb29d63000   0x1ff000     0x9000 /usr/lib64/libjbig.so.2.0
      0x7fcb29d63000     0x7fcb29d64000     0x1000     0x8000 /usr/lib64/libjbig.so.2.0
      0x7fcb29d64000     0x7fcb29d67000     0x3000     0x9000 /usr/lib64/libjbig.so.2.0
      0x7fcb29d67000     0x7fcb29d90000    0x29000        0x0 /usr/lib64/libpng15.so.15.13.0


然后搜索内存相关代码
  1. x/200x 0x7fcacfe00000
  2. x/50s 0x7fcacfe00000
  3. x/200x 0x7fcb16e43000
  4. x/50s 0x7fcb16e43000
复制代码
欢迎光临IT技术交流论坛:http://bbs.itzmx.com/
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025/11/6 06:54 , Processed in 0.102665 second(s), 20 queries , MemCache On.

Powered by itzmx! X3.4

© 2011- sakura

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