Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
企猫商务
frp
提交
caa6e8cf
F
frp
项目概览
企猫商务
/
frp
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
frp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
caa6e8cf
编写于
4月 02, 2020
作者:
T
Tank
提交者:
GitHub
4月 02, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: frpc reconnect frps frequently lead to memory leak (#1722)
上级
ffb93239
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
63 addition
and
8 deletion
+63
-8
client/control.go
client/control.go
+1
-0
client/service.go
client/service.go
+25
-0
client/visitor_manager.go
client/visitor_manager.go
+25
-8
go.sum
go.sum
+12
-0
未找到文件。
client/control.go
浏览文件 @
caa6e8cf
...
...
@@ -183,6 +183,7 @@ func (ctl *Control) HandleNewProxyResp(inMsg *msg.NewProxyResp) {
func
(
ctl
*
Control
)
Close
()
error
{
ctl
.
pm
.
Close
()
ctl
.
conn
.
Close
()
ctl
.
vm
.
Close
()
if
ctl
.
session
!=
nil
{
ctl
.
session
.
Close
()
}
...
...
client/service.go
浏览文件 @
caa6e8cf
...
...
@@ -142,12 +142,34 @@ func (svr *Service) keepControllerWorking() {
maxDelayTime
:=
20
*
time
.
Second
delayTime
:=
time
.
Second
// if frpc reconnect frps, we need to limit retry times in 1min
// current retry logic is sleep 0s, 0s, 0s, 1s, 2s, 4s, 8s, ...
// when exceed 1min, we will reset delay and counts
cutoffTime
:=
time
.
Now
()
.
Add
(
time
.
Minute
)
reconnectDelay
:=
time
.
Second
reconnectCounts
:=
1
for
{
<-
svr
.
ctl
.
ClosedDoneCh
()
if
atomic
.
LoadUint32
(
&
svr
.
exit
)
!=
0
{
return
}
// the first three retry with no delay
if
reconnectCounts
>
3
{
time
.
Sleep
(
reconnectDelay
)
reconnectDelay
*=
2
}
reconnectCounts
++
now
:=
time
.
Now
()
if
now
.
After
(
cutoffTime
)
{
// reset
cutoffTime
=
now
.
Add
(
time
.
Minute
)
reconnectDelay
=
time
.
Second
reconnectCounts
=
1
}
for
{
xl
.
Info
(
"try to reconnect to server..."
)
conn
,
session
,
err
:=
svr
.
login
()
...
...
@@ -166,6 +188,9 @@ func (svr *Service) keepControllerWorking() {
ctl
:=
NewControl
(
svr
.
ctx
,
svr
.
runId
,
conn
,
session
,
svr
.
cfg
,
svr
.
pxyCfgs
,
svr
.
visitorCfgs
,
svr
.
serverUDPPort
,
svr
.
authSetter
)
ctl
.
Run
()
svr
.
ctlMu
.
Lock
()
if
svr
.
ctl
!=
nil
{
svr
.
ctl
.
Close
()
}
svr
.
ctl
=
ctl
svr
.
ctlMu
.
Unlock
()
break
...
...
client/visitor_manager.go
浏览文件 @
caa6e8cf
...
...
@@ -33,6 +33,8 @@ type VisitorManager struct {
mu
sync
.
Mutex
ctx
context
.
Context
stopCh
chan
struct
{}
}
func
NewVisitorManager
(
ctx
context
.
Context
,
ctl
*
Control
)
*
VisitorManager
{
...
...
@@ -42,22 +44,32 @@ func NewVisitorManager(ctx context.Context, ctl *Control) *VisitorManager {
visitors
:
make
(
map
[
string
]
Visitor
),
checkInterval
:
10
*
time
.
Second
,
ctx
:
ctx
,
stopCh
:
make
(
chan
struct
{}),
}
}
func
(
vm
*
VisitorManager
)
Run
()
{
xl
:=
xlog
.
FromContextSafe
(
vm
.
ctx
)
ticker
:=
time
.
NewTicker
(
vm
.
checkInterval
)
defer
ticker
.
Stop
()
for
{
time
.
Sleep
(
vm
.
checkInterval
)
vm
.
mu
.
Lock
()
for
_
,
cfg
:=
range
vm
.
cfgs
{
name
:=
cfg
.
GetBaseInfo
()
.
ProxyName
if
_
,
exist
:=
vm
.
visitors
[
name
];
!
exist
{
xl
.
Info
(
"try to start visitor [%s]"
,
name
)
vm
.
startVisitor
(
cfg
)
select
{
case
<-
vm
.
stopCh
:
xl
.
Info
(
"gracefully shutdown visitor manager"
)
return
case
<-
ticker
.
C
:
vm
.
mu
.
Lock
()
for
_
,
cfg
:=
range
vm
.
cfgs
{
name
:=
cfg
.
GetBaseInfo
()
.
ProxyName
if
_
,
exist
:=
vm
.
visitors
[
name
];
!
exist
{
xl
.
Info
(
"try to start visitor [%s]"
,
name
)
vm
.
startVisitor
(
cfg
)
}
}
vm
.
mu
.
Unlock
()
}
vm
.
mu
.
Unlock
()
}
}
...
...
@@ -126,4 +138,9 @@ func (vm *VisitorManager) Close() {
for
_
,
v
:=
range
vm
.
visitors
{
v
.
Close
()
}
select
{
case
<-
vm
.
stopCh
:
default
:
close
(
vm
.
stopCh
)
}
}
go.sum
浏览文件 @
caa6e8cf
...
...
@@ -3,6 +3,7 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuy
github.com/alecthomas/template
v0.0.0-20190718012654-fb15b899a751/go.mod h1:
LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units
v0.0.0-20151022065526-2efee857e7cf/go.mod h1:
ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units
v0.0.0-20190717042225-c3de453c63f4/go.mod h1:
ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/armon/go-socks5
v0.0.0-20160902184237-e75332964ef5 h1:
0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5
v0.0.0-20160902184237-e75332964ef5/go.mod h1:
wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/beorn7/perks
v0.0.0-20180321164747-3a771d992973/go.mod h1:
Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks
v1.0.0/go.mod h1:
KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
...
...
@@ -15,6 +16,7 @@ github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHo
github.com/davecgh/go-spew
v1.1.0/go.mod h1:
J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew
v1.1.1 h1:
vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew
v1.1.1/go.mod h1:
J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatedier/beego
v0.0.0-20171024143340-6c6a4f5bd5eb h1:
wCrNShQidLmvVWn/0PikGmpdP0vtQmnvyRg3ZBEhczw=
github.com/fatedier/beego
v0.0.0-20171024143340-6c6a4f5bd5eb/go.mod h1:
wx3gB6dbIfBRcucp94PI9Bt3I0F2c/MyNEWuhzpWiwk=
github.com/fatedier/golib
v0.0.0-20181107124048-ff8cd814b049 h1:
teH578mf2ii42NHhIp3PhgvjU5bv+NFMq9fSQR8NaG8=
github.com/fatedier/golib
v0.0.0-20181107124048-ff8cd814b049/go.mod h1:
DqIrnl0rp3Zybg9zbJmozTy1n8fYJoX+QoAj9slIkKM=
...
...
@@ -30,6 +32,7 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
github.com/golang/protobuf
v1.3.1/go.mod h1:
6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf
v1.3.2 h1:
6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf
v1.3.2/go.mod h1:
6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/snappy
v0.0.0-20170215233205-553a64147049 h1:
K9KHZbXKpGydfDN0aZrsoHpLJlZsBrGMFWbgLDGnPZk=
github.com/golang/snappy
v0.0.0-20170215233205-553a64147049/go.mod h1:
/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp
v0.3.1/go.mod h1:
8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp
v0.4.0/go.mod h1:
v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
...
...
@@ -66,6 +69,7 @@ github.com/pires/go-proxyproto v0.0.0-20190111085350-4d51b51e3bfc/go.mod h1:6/gX
github.com/pkg/errors
v0.8.0/go.mod h1:
bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors
v0.8.1 h1:
iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
github.com/pkg/errors
v0.8.1/go.mod h1:
bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib
v1.0.0 h1:
4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib
v1.0.0/go.mod h1:
iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pquerna/cachecontrol
v0.0.0-20180517163645-1555304b9b35 h1:
J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU=
github.com/pquerna/cachecontrol
v0.0.0-20180517163645-1555304b9b35/go.mod h1:
prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
...
...
@@ -84,11 +88,15 @@ github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R
github.com/prometheus/procfs
v0.0.2/go.mod h1:
TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs
v0.0.8 h1:
+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8=
github.com/prometheus/procfs
v0.0.8/go.mod h1:
7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/rakyll/statik
v0.1.1 h1:
fCLHsIMajHqD5RKigbFXpvX3dN7c80Pm12+NCrI3kvg=
github.com/rakyll/statik
v0.1.1/go.mod h1:
OEi9wJV/fMUAGx1eNjq75DKDsJVuEv1U0oYdX6GX8Zs=
github.com/rodaine/table
v1.0.0 h1:
UaCJG5Axc/cNXVGXqnCrffm1KxP0OfYLe1HuJLf5sFY=
github.com/rodaine/table
v1.0.0/go.mod h1:
YAUzwPOji0DUJNEvggdxyQcUAl4g3hDRcFlyjnnR51I=
github.com/sirupsen/logrus
v1.2.0/go.mod h1:
LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus
v1.4.2/go.mod h1:
tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/spf13/cobra
v0.0.3 h1:
ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8=
github.com/spf13/cobra
v0.0.3/go.mod h1:
1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/pflag
v1.0.1 h1:
aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4=
github.com/spf13/pflag
v1.0.1/go.mod h1:
DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/stretchr/objx
v0.1.0/go.mod h1:
HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx
v0.1.1/go.mod h1:
HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
...
...
@@ -96,9 +104,13 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
github.com/stretchr/testify
v1.3.0/go.mod h1:
M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify
v1.4.0 h1:
2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify
v1.4.0/go.mod h1:
j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/templexxx/cpufeat
v0.0.0-20170927014610-3794dfbfb047 h1:
K+jtWCOuZgCra7eXZ/VWn2FbJmrA/D058mTXhh2rq+8=
github.com/templexxx/cpufeat
v0.0.0-20170927014610-3794dfbfb047/go.mod h1:
wM7WEvslTq+iOEAMDLSzhVuOt5BRZ05WirO+b09GHQU=
github.com/templexxx/xor
v0.0.0-20170926022130-0af8e873c554 h1:
pexgSe+JCFuxG+uoMZLO+ce8KHtdHGhst4cs6rw3gmk=
github.com/templexxx/xor
v0.0.0-20170926022130-0af8e873c554/go.mod h1:
5XA7W9S6mni3h5uvOC75dA3m9CCCaS83lltmc0ukdi4=
github.com/tjfoc/gmsm
v0.0.0-20171124023159-98aa888b79d8 h1:
6CNSDqI1wiE+JqyOy5Qt/yo/DoNI2/QmmOZeiCid2Nw=
github.com/tjfoc/gmsm
v0.0.0-20171124023159-98aa888b79d8/go.mod h1:
XxO4hdhhrzAd+G4CjDqaOkd0hUzmtPR/d3EiBBMn/wc=
github.com/vaughan0/go-ini
v0.0.0-20130923145212-a98ad7ee00ec h1:
DGmKwyZwEB8dI7tbLt/I/gQuP559o/0FrAkHKlQM/Ks=
github.com/vaughan0/go-ini
v0.0.0-20130923145212-a98ad7ee00ec/go.mod h1:
owBmyHYMLkxyrugmfwE/DLJyW8Ro9mkphwuVErQ0iUw=
github.com/xtaci/lossyconn
v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:
gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE=
golang.org/x/crypto
v0.0.0-20180904163835-0709b304e793/go.mod h1:
6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录