Skip to content

Commit a78fb6d

Browse files
committed
Increase file descriptor limit at startup.
1 parent 82b10b2 commit a78fb6d

File tree

5 files changed

+62
-1
lines changed

5 files changed

+62
-1
lines changed

galene.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/jech/galene/diskwriter"
1616
"github.com/jech/galene/group"
1717
"github.com/jech/galene/ice"
18+
"github.com/jech/galene/limit"
1819
"github.com/jech/galene/turnserver"
1920
"github.com/jech/galene/webserver"
2021
)
@@ -104,6 +105,13 @@ func main() {
104105
}()
105106
}
106107

108+
n, err := limit.Nofile(0xFFFF)
109+
if err != nil {
110+
log.Printf("Couldn't set file descriptor limit: %v", err)
111+
} else if n < 0xFFFF {
112+
log.Printf("File descriptor limit is %v, please increase it!", n)
113+
}
114+
107115
ice.ICEFilename = filepath.Join(dataDir, "ice-servers.json")
108116

109117
go group.ReadPublicGroups()

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ require (
1313
github.com/pion/turn/v2 v2.0.5
1414
github.com/pion/webrtc/v3 v3.0.31
1515
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97
16+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c
1617
)

go.sum

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,9 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
122122
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
123123
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
124124
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
125-
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4=
126125
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
126+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I=
127+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
127128
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
128129
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
129130
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=

limit/limit.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// +build windows plan9
2+
3+
package limit
4+
5+
func Nofile(desired uint64) (uint64, error) {
6+
return desired, nil
7+
}

limit/limit_unix.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// +build !windows
2+
// +build !plan9
3+
4+
package limit
5+
6+
import (
7+
"golang.org/x/sys/unix"
8+
)
9+
10+
func Nofile(desired uint64) (uint64, error) {
11+
var old unix.Rlimit
12+
13+
err := unix.Getrlimit(unix.RLIMIT_NOFILE, &old)
14+
if err != nil {
15+
return 0, err
16+
}
17+
18+
if old.Cur >= desired {
19+
return old.Cur, nil
20+
}
21+
22+
if old.Max < desired {
23+
limit := unix.Rlimit{
24+
Cur: desired,
25+
Max: desired,
26+
}
27+
err := unix.Setrlimit(unix.RLIMIT_NOFILE, &limit)
28+
if err == nil {
29+
return limit.Cur, nil
30+
}
31+
32+
desired = old.Max
33+
}
34+
35+
limit := unix.Rlimit{
36+
Cur: desired,
37+
Max: old.Max,
38+
}
39+
err = unix.Setrlimit(unix.RLIMIT_NOFILE, &limit)
40+
if err != nil {
41+
return old.Cur, err
42+
}
43+
return limit.Cur, nil
44+
}

0 commit comments

Comments
 (0)