Hi,

I am debugging an issue where a server opening a large number of 
connections on startup sometimes dies with "program exceeds 10000-thread 
limit". I know file IO operations could lock up an OS thread. Still seeing 
this crash after eliminating file IO, and it looks like "syscall.connect" 
is a blocking call and could tie up an OS thread. This is on Linux with 
golang 1.21.7.

I wrote a small program to test this out. Running this with "go run 
osthreads.go -parallel 500 -threads 5" does trigger crashes sometimes, and 
I see goroutines blocked on "syscall.connect" and "syscall.fcntl". Could I 
get confirmation that this is expected behavior and Connect is a blocking 
syscall?

===
package main

import (
"flag"
"fmt"
"net"
"runtime"
"runtime/debug"
"sync"
"time"
)

func main() {
numThreads := flag.Int("threads", 10, "number of threads (in addition to 
GOMAXPROCS)")
parallelism := flag.Int("parallel", 100, "number of parallel goroutines to 
start")
flag.Parse()

maxThreads := runtime.GOMAXPROCS(-1) + *numThreads
fmt.Printf("GOMAXPROCS=%d, max threads=%d\n", runtime.GOMAXPROCS(-1), 
maxThreads)
debug.SetMaxThreads(maxThreads)

// Server that does not accept any connections
listener, err := net.Listen("tcp", "127.0.0.1:9090")
if err != nil {
fmt.Println(err)
return
}
defer listener.Close()

wg := sync.WaitGroup{}
startSignal := make(chan struct{})

// Spawn all goroutines
for i := 0; i < *parallelism; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
<-startSignal

conn, err := net.DialTimeout("tcp", "127.0.0.1:9090", time.Second)
if err != nil {
fmt.Printf("%d: error: %s\n", id, err)
return
}
defer conn.Close()
time.Sleep(time.Second)
}(i)
}

time.Sleep(time.Second)

// Start them all at once
close(startSignal)
wg.Wait()
}

===

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/33ab22bf-088a-4724-8cfb-62b7f51fca96n%40googlegroups.com.

Reply via email to