Hi, I have a program need to create large number of listening UDPConn, basically around 30k, each UDPConn will run in its own go routine waiting incoming packets, so that's 30k go routines, however I hit the wall of 10000 system threads limitation; after search around, I found it is because I set socket option to use ESPinUDP encap: "syscall.SetsockoptInt(conn_fd, syscall.IPPROTO_UDP, 100, 2)" , with the socket option set, each go routine is blocked in syscall, thus consuming a lots of system threads:
101 @ 0x47b915 0x47b163 0x47841f 0x49039f 0x4f735b 0x516dba 0x514bad 0x6fd1bf 0x45c741 # 0x47b914 syscall.Syscall6+0x4 /usr/local/go/src/syscall/asm_linux_amd64.s:44 # 0x47b162 syscall.recvfrom+0xa2 /usr/local/go/src/syscall/zsyscall_linux_amd64.go:1648 # 0x47841e syscall.Recvfrom+0xae /usr/local/go/src/syscall/syscall_unix.go:262 # 0x49039e internal/poll.(*FD).ReadFrom+0xfe /usr/local/go/src/internal/poll/fd_unix.go:215 # 0x4f735a net.(*netFD).readFrom+0x5a /usr/local/go/src/net/fd_unix.go:208 # 0x516db9 net.(*UDPConn).readFrom+0x69 /usr/local/go/src/net/udpsock_posix.go:47 # 0x514bac net.(*UDPConn).ReadFromUDP+0x6c /usr/local/go/src/net/udpsock.go:109 # 0x6fd1be main.listensocket+0x3ae /root/gowork/src/test/test.go:55 if I don't set the socket option, then number of thread is far less, and go routine no longer use syscall: 101 @ 0x42f3cb 0x42a709 0x429db6 0x48f1aa 0x48f2bd 0x490408 0x4f735b 0x516dba 0x514bad 0x6fd0b7 0x45c741 # 0x429db5 internal/poll.runtime_pollWait+0x65 /usr/local/go/src/runtime/netpoll.go:173 # 0x48f1a9 internal/poll.(*pollDesc).wait+0x99 /usr/local/go/src/internal/poll/fd_poll_runtime.go:85 # 0x48f2bc internal/poll.(*pollDesc).waitRead+0x3c /usr/local/go/src/internal/poll/fd_poll_runtime.go:90 # 0x490407 internal/poll.(*FD).ReadFrom+0x167 /usr/local/go/src/internal/poll/fd_unix.go:219 # 0x4f735a net.(*netFD).readFrom+0x5a /usr/local/go/src/net/fd_unix.go:208 # 0x516db9 net.(*UDPConn).readFrom+0x69 /usr/local/go/src/net/udpsock_posix.go:47 # 0x514bac net.(*UDPConn).ReadFromUDP+0x6c /usr/local/go/src/net/udpsock.go:109 # 0x6fd0b6 main.listensocket+0x2a6 /root/gowork/src/test/test.go:55 so is there way to use socket option without consume so many system threads? -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.