2016-04-09 20 views
1

Benim kodları:Git Socket Server EOF hatası aldı mı?

var connMax int = 0 

    func CheckErr(err error) { 
     if err != nil { 
      fmt.Fprintf(os.Stderr, "Error occured: %s\n", err) 
      os.Exit(1) 
     } 
    } 

    func handler(conn net.Conn) { 
     defer conn.Close() 

     var buf [512]byte 
     n, err := conn.Read(buf[0:]) 
     CheckErr(err) 

     connMax += 1 
     fmt.Println(connMax) 

     result := bytes.NewBuffer(nil) 
     result.Write(buf[0:n]) 

     fmt.Println(string(result.Bytes())) 

     conn.Write([]byte("HTTP/1.1 201 OK\r\n")) 

    func Run() { 
     ln, err := net.Listen("tcp", ":8080") 
     CheckErr(err) 
     for { 
      conn, err := ln.Accept() 
      CheckErr(err) 
      go handler(conn) 
     } 
    } 

Ben paket apache2-utils komutası ab ile sunucuyu test etmeye çalıştı. O bitmiş, EOF hata oluştu kez ab -c 1500 -n 10000 http://127.0.0.1:8080/

, süreç çıkışında böylece: enter image description here

+0

İşletim sisteminizde kaç tane açık dosya tanıtıcısı var? Kontrol etmek için 'ulimit -a' kullanın. Sanırım 10000'den az. – jfly

+0

Ayrıca bkz. Http://stackoverflow.com/questions/30352725/why-is-my-hello-world-go-server-getting-crushed-by-apachebench – JimB

cevap

0

io.EOF bağlantı diğer sonuna kadar kapalı olduğunu gösterir. Sanırım ab açık dosya tanımlayıcılarının sınırlarına ulaştığı için bağlantı kapatıldı. Kontrol etmek için ulimit -a kullanın. 10000'den azsa, değiştirmek için ulimit -n 65536 kullanın. Bu 10000'den fazla bağlantıya izin vermektir. 65536'yı rasgele seçiyorum ve bu yapılandırmayı yapmak için root ayrıcalığına ihtiyacınız var.