C语言写的Linux web软件好像都有个内存泄漏的通病,比如kangle连接数占用不释放内存空间,避免进程重新申请优化
C语言写的Linux web软件好像都有个内存泄漏的通病,比如kangle连接数占用不释放内存空间,避免进程重新申请优化还有就是kangle有没有办法释放下内存,没开缓存功能也会占用上1G的进程内存,然后甚至还跑进去swap里。反而其它web软件就很稳,同样的每秒100并发左右访问量情况下只要10-20MB内存占用,这些内存应该是内核建立TCP连接是内核吃的,而不是发生在进程上,你想办法弄个快照文件看看是什么在吃内存?弄个计时器每5分钟释放一下,或者直接用完立即释放不要积累避免内存泄漏,现在kangle就是根据访问量连接数吃了内存,然后永远不释放,这样导致1G内存的vps想开内存缓存都不好开,因为kangle自身要吃掉1G,没有空闲内存去做缓存了,还是说这是C语言通病,避免进程重新申请连接数需要的内存空间
看了下nginx也是c语言,就很稳占用内存就10M,就是有很多工作进程,所以这一定是发生在kangle上的问题吧
https://att.itzmx.com/data/attachment/forum/202412/04/182231pzvzmbvmckdkzdrk.jpg
帖子补充
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
然后搜索内存相关代码
x/200x 0x7fcacfe00000
x/50s 0x7fcacfe00000
x/200x 0x7fcb16e43000
x/50s 0x7fcb16e43000
页:
[1]