Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

0.10 启用加密和压缩后,占用内存异常 #345

Closed
laoyur opened this issue Jun 2, 2017 · 12 comments
Closed

0.10 启用加密和压缩后,占用内存异常 #345

laoyur opened this issue Jun 2, 2017 · 12 comments
Milestone

Comments

@laoyur
Copy link

laoyur commented Jun 2, 2017

What version of frp are you using (./frpc -v or ./frps -v)?
0.10

What operating system and processor architecture are you using (go env)?
Ubuntu 16.04 x64

Steps to reproduce the issue:

  • 测试1:3个frpc,全都同时启用加密和压缩,一天内流经frps的总流量大概在几G的量级
  • 测试2:3个frpc,全都同时关闭加密和压缩,一天内流经frps的总流量大概在几G的量级

Describe the results you received:

  • 测试1:短时间内(1小时左右)frps内存占用占满可用内存(900多MB),然后逐渐占满所有swap
  • 测试2:运行了三个小时后,frps只占用100多MB内存,swap几乎未占用,期待更长时间的测试
@fatedier
Copy link
Owner

fatedier commented Jun 2, 2017

麻烦提供下具体的内存使用情况 /proc/meminfo ,如果是 cache 的部分,忽略即可。

@laoyur
Copy link
Author

laoyur commented Jun 2, 2017

下面是未启用加密和压缩时frps所在机器的内存情况,机器上几乎只运行frps一个程序,frps已连续工作三小时以上:

# cat /proc/meminfo
MemTotal:        1010676 kB
MemFree:          351856 kB
MemAvailable:     769748 kB
Buffers:           74096 kB
Cached:           311936 kB
SwapCached:         4972 kB
Active:           467248 kB
Inactive:          83100 kB
Active(anon):     155972 kB
Inactive(anon):    13364 kB
Active(file):     311276 kB
Inactive(file):    69736 kB
Unevictable:        3660 kB
Mlocked:            3660 kB
SwapTotal:       4189908 kB
SwapFree:        4160684 kB
Dirty:                 4 kB
Writeback:             0 kB
AnonPages:        165856 kB
Mapped:            27248 kB
Shmem:              2596 kB
Slab:              75224 kB
SReclaimable:      51388 kB
SUnreclaim:        23836 kB
KernelStack:        2800 kB
PageTables:         3080 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4695244 kB
Committed_AS:     348884 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:     32768 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       67568 kB
DirectMap2M:      980992 kB

以下是启用了加密和压缩时frps所在机器的内存情况,frps是完全重启后运行了10分钟左右。

MemTotal:        1010676 kB
MemFree:           13180 kB
MemAvailable:     245008 kB
Buffers:           51608 kB
Cached:           149868 kB
SwapCached:         9368 kB
Active:           451384 kB
Inactive:         438728 kB
Active(anon):     342272 kB
Inactive(anon):   351124 kB
Active(file):     109112 kB
Inactive(file):    87604 kB
Unevictable:        3660 kB
Mlocked:            3660 kB
SwapTotal:       4189908 kB
SwapFree:        4118784 kB
Dirty:                24 kB
Writeback:             0 kB
AnonPages:        687176 kB
Mapped:            26044 kB
Shmem:              2336 kB
Slab:              73572 kB
SReclaimable:      49620 kB
SUnreclaim:        23952 kB
KernelStack:        2784 kB
PageTables:         4240 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4695244 kB
Committed_AS:     941944 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
HardwareCorrupted:     0 kB
AnonHugePages:    178176 kB
CmaTotal:              0 kB
CmaFree:               0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       67568 kB
DirectMap2M:      980992 kB

@fatedier
Copy link
Owner

fatedier commented Jun 5, 2017

确认下是否运行的是大量短连接的请求?比如 web 服务?

内存占用过了一段时间之后是否会释放(明显减少)?

@fatedier
Copy link
Owner

fatedier commented Jun 5, 2017

推测应该和 #332 是同样的原因引起的,有一些短连接没有正确关闭导致了内存也没有正确释放。

@fatedier
Copy link
Owner

fatedier commented Jun 5, 2017

修复了之后编译的版本,可以尝试用这个版本再测试一下

https://pan.baidu.com/s/1eRTu3mU
yfwm

@fatedier fatedier added this to the v0.12 milestone Jun 5, 2017
@laoyur
Copy link
Author

laoyur commented Jun 6, 2017

感谢答复,我是用来反代socks server的,的确是大量的短连接,在frps dashboard中显示瞬间connections有时可达数百,并且开启加密和压缩后,connections数量比未开启时要大

一天8小时跑下来(总耗费流量约10G),1G的总内存,未开加密压缩时,frps的内存占用大概是从几十MB平缓增加到450MB左右(已忽略cached);而开启加密和压缩时,frps的内存占用是在短时间内飙升到900MB+,最后全部访问终端断开后,慢慢降到约600MB
现在我每天都要重启一次frps,无论开不开压缩和加密

你的测试版我要明天一早才能测试了,到时候再来反馈。

@fatedier
Copy link
Owner

fatedier commented Jun 6, 2017

大概测试了一下,2000并发的情况,内存占用会到300多MB,连接全部断开一段时间后恢复到 20MB左右。

@laoyur
Copy link
Author

laoyur commented Jun 7, 2017

看上去比之前正常多了。图中6月6日的红线是0.10未开加密和压缩,6月7日7点多的红色突发,是上面测试版0.11开启了加密和压缩后开始工作的情况

@fatedier
Copy link
Owner

fatedier commented Jun 7, 2017

目前看起来内存占用主要是针对每个连接需要分配一定的缓冲区,所以和你的请求数是相关的,和流量多少没有太大的关系。加密和压缩需要额外的缓冲区。

Go 的内存管理机制是定期释放不用的内存,看起来你的请求量还比较大,能大概计算下 qps 在多少左右?

@laoyur
Copy link
Author

laoyur commented Jun 8, 2017

不太会评估平均请求量,描述一下使用场景,大概是十多个访问终端,全天工作,单终端一次业务大概持续1分钟,产生几十至一百次请求,每个请求持续几秒至十几秒。

再贴一下未开加密和测试0.11开启加密压缩的对比图:

目前看来,对于我的使用场景,压缩的省流量效果不是很明显,我明天再试试加密不压缩吧,或者以后就索性不使用加密压缩了。

@fatedier
Copy link
Owner

fatedier commented Jun 8, 2017

👍

  1. 开启加密后,数据包会变大。这里的加密是指 frpc 和 frps 之间的通信,一般是为了防止被防火墙或者网关过滤。
  2. 压缩针对的是每个包比较大的情况,如果都是小包,可能反而会有负面效果。

@laoyur
Copy link
Author

laoyur commented Jun 8, 2017

感谢答复。
那有没有可能在压缩的时候,有个包体阈值,超过一定大小后再压缩
这个问题我先关了

@laoyur laoyur closed this as completed Jun 8, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants