Skip to content

Instantly share code, notes, and snippets.

@karampok
Created May 24, 2017 15:41
Show Gist options
  • Save karampok/20d0504c01f68f75c732098c68269938 to your computer and use it in GitHub Desktop.
Save karampok/20d0504c01f68f75c732098c68269938 to your computer and use it in GitHub Desktop.
go-killme
package main
import (
"bufio"
"crypto/rand"
"flag"
"fmt"
"log"
"net"
"os"
"runtime/debug"
"time"
)
var logger *log.Logger
func main() {
sleepTime := flag.Int64("sleepTime", 30, "sleep time between messages in ms")
numThreads := flag.Int("numThreads", 100, "number of concurrent TCP hogs")
messagesPerWorker := flag.Int("messagesPerWorker", 100, "number of messages a worker sends before quitting")
flag.Parse()
logger = log.New(os.Stdout, "", log.LstdFlags)
debug.SetGCPercent(-1)
buf := make([]byte, 1024*1024*200)
_, err := rand.Read(buf)
if err != nil {
fmt.Println("error:", err)
return
}
address := &net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: 13333}
listener, err := net.ListenTCP("tcp", address)
must(err)
go func() {
for {
incoming, err := listener.Accept()
must(err)
go func(c net.Conn) {
//defer c.Close()
scanner := bufio.NewScanner(c)
for scanner.Scan() {
logger.Println(scanner.Text())
}
_, err := c.Write(buf)
must(err)
}(incoming)
}
}()
workerCh := make(chan int, 10)
for i := 0; i < *numThreads; i++ {
go worker(i, *messagesPerWorker, workerCh, address, time.Duration(*sleepTime))
}
for {
i := <-workerCh
go worker(i, *messagesPerWorker, workerCh, address, time.Duration(*sleepTime))
}
}
func worker(workerID, messagesPerWorker int, done chan<- int, address *net.TCPAddr, sleepTime time.Duration) {
logger.Printf("starting worker %d\n", workerID)
conn, err := net.DialTCP("tcp", nil, address)
must(err)
defer conn.Close()
for j := 0; j < messagesPerWorker; j++ {
fmt.Fprintf(conn, "hi from hog %d\n", workerID)
time.Sleep(time.Millisecond * sleepTime)
}
done <- workerID
logger.Printf("finished worker %d\n", workerID)
}
func must(err error) {
if err != nil {
//panic(err)
fmt.Println(err)
}
}
@karampok
Copy link
Author

func main() {
- sleepTime := flag.Int64("sleepTime", 50, "sleep time between messages in ms")
+ sleepTime := flag.Int64("sleepTime", 30, "sleep time between messages in ms")
  numThreads := flag.Int("numThreads", 100, "number of concurrent TCP hogs")
  messagesPerWorker := flag.Int("messagesPerWorker", 100, "number of messages a worker sends before quitting")
  flag.Parse()
+ //debug.SetGCPercent(-1)

  logger = log.New(os.Stdout, "", log.LstdFlags)
+ response := make([]byte, 1024*1024*5)
+ if _, err := rand.Read(response); err != nil {
+   // Handle err
+ }

- address := &net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: 13333}
+ address := &net.TCPAddr{IP: net.ParseIP("127.0.0.1"), Port: 13334}
  listener, err := net.ListenTCP("tcp", address)
  must(err)
  go func() {
@@ -29,6 +39,8 @@ func main() {
      must(err)
      go func(c net.Conn) {
        defer c.Close()
+       _, err := c.Write(response)
+       must(err)
        scanner := bufio.NewScanner(c)
        for scanner.Scan() {
          logger.Println(scanner.Text())
@@ -63,6 +75,6 @@ func worker(workerID, messagesPerWorker int, done chan<- int, address *net.TCPAd

 func must(err error) {
  if err != nil {
-   panic(err)
+   fmt.Println(err)
  }
 }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment