From 04fd7ce9e1331f7a6537b6e93681b22e8e1fc161 Mon Sep 17 00:00:00 2001 From: Joshua Poehls Date: Fri, 22 May 2015 19:34:00 -0500 Subject: [PATCH] Updated ulimit warning message to include the recommended min value. --- main.go | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/main.go b/main.go index a0f7afd8..18478d6a 100644 --- a/main.go +++ b/main.go @@ -95,18 +95,9 @@ func main() { } } - // Warn if ulimit is too low for production sites - if (runtime.GOOS == "linux" || runtime.GOOS == "darwin") && - !addr.IP.IsLoopback() && !checkedFdLimit { - out, err := exec.Command("sh", "-c", "ulimit -n").Output() // use sh because ulimit isn't in Linux $PATH - if err == nil { - // Note that an error here need not be reported - lim, err := strconv.Atoi(string(bytes.TrimSpace(out))) - if err == nil && lim < 4096 { - fmt.Printf("Warning: File descriptor limit is too low (%d) for production sites\n", lim) - } - checkedFdLimit = true - } + if !checkedFdLimit && !addr.IP.IsLoopback() { + checkFdlimit() + checkedFdLimit = true } } } @@ -115,6 +106,23 @@ func main() { app.Wg.Wait() } +// checkFdlimit issues a warning if the OS max file descriptors is below a recommended minimum. +func checkFdlimit() { + const min = 4096 + + // Warn if ulimit is too low for production sites + if runtime.GOOS == "linux" || runtime.GOOS == "darwin" { + out, err := exec.Command("sh", "-c", "ulimit -n").Output() // use sh because ulimit isn't in Linux $PATH + if err == nil { + // Note that an error here need not be reported + lim, err := strconv.Atoi(string(bytes.TrimSpace(out))) + if err == nil && lim < min { + fmt.Printf("Warning: File descriptor limit %d is too low for production sites. Recommend at least ulimit -n %d\n", lim, min) + } + } + } +} + // isLocalhost returns true if the string looks explicitly like a localhost address. func isLocalhost(s string) bool { return s == "localhost" || s == "::1" || strings.HasPrefix(s, "127.")