Maybe your client's local ports is used out. threre are only about 65000 
ports you can use to make a connection from a client to server per IP. You 
can check output of netstat to confirm that. 

On Sunday, June 11, 2017 at 9:48:30 AM UTC+8, 刘桂祥 wrote:
>
> //question
> >         I write a simple golang tcp server
> >         and use tcp short connect client to bench it.
> >         when qps up to 28K,  client have many dial i/o timeout
> > 
> >         I don't know what is the performance bottleneck??
> >         
> >         I modify the server:
> >         cat /proc/sys/net/ipv4/tcp_max_syn_backlog    1024
> >         cat /proc/sys/net/core/somaxconn              1024
>
> //a simple golang tcp server
>         
>        package main
>         
>         import (
>         "io"
>         "log"
>         "net"
>         )
>         
>         func init() {
>         log.SetFlags(log.LstdFlags | log.Lshortfile)
>         }
>         func main() {
>         tcpAddr, err := net.ResolveTCPAddr("tcp", ":9999")
>         if err != nil {
>         log.Println(err)
>         return
>         }   
>         tcpListener, err := net.ListenTCP("tcp", tcpAddr)
>         if err != nil {
>         log.Println(err)
>            return
>         }   
>         defer tcpListener.Close()
>         
>         for {
>         tcpConn, err := tcpListener.AcceptTCP()
>         if err != nil {
>         log.Println(err)
>         continue
>         }
>         go handle(tcpConn)
>         }
>         
>         }
>         func handle(conn *net.TCPConn) {
>         //log.Println(conn.RemoteAddr().String())
>         
>         buf := make([]byte, 1024)
>         for {
>         _, err := conn.Read(buf)
>         if err != nil {
>         if err != io.EOF {
>         log.Println(err)
>         }
>         return
>         }
>         
>         _, err = conn.Write([]byte{'h', 'e', 'l', 'l', 'o'})
>         
>         if err != nil {
>         log.Println(err)
>         }
>         }
>         }
>     
> // tcp short connection bench
>
>     package main
>     
>     import (
>     "log"
>     "net"
>     "sync"
>     "time"
>     )
>     
>     var (
>     wg sync.WaitGroup
>     )
>     
>     func init() {
>     log.SetFlags(log.LstdFlags | log.Lshortfile)
>     }
>     func main() {
>     
>     for i := 0; i < 150; i++ {
>     wg.Add(1)
>     go func() {
>     for {
>     req()
>     time.Sleep(10 * time.Millisecond)
>     }
>     wg.Done()
>     }()
>     }
>     wg.Wait()
>     }
>     // tcp req
>     func req() {
>     conn, err := net.DialTimeout("tcp", "192.168.67.133:9999", 
> 300*time.Millisecond)
>     if err != nil {
>     log.Println(err)
>     return
>     }
>     // conn.SetDeadline(time.Now().Add(300 * time.Millisecond))
>     defer conn.Close()
>     _, err = conn.Write([]byte("client"))
>     if err != nil {
>     log.Println(err)
>     return
>     }
>     buf := make([]byte, 1024)
>     _, err = conn.Read(buf)
>     if err != nil {
>     log.Println(err)
>     }
>     }
>

-- 
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.

Reply via email to