0
Fork 0
mirror of https://github.com/caddyserver/caddy.git synced 2024-12-23 22:27:38 -05:00

Merge pull request #84 from jpoehls/master

Updated ulimit warning message to include the recommended min value.
This commit is contained in:
Matt Holt 2015-05-22 18:50:12 -06:00
commit 99c069df15

32
main.go
View file

@ -95,18 +95,9 @@ func main() {
} }
} }
// Warn if ulimit is too low for production sites if !checkedFdLimit && !addr.IP.IsLoopback() {
if (runtime.GOOS == "linux" || runtime.GOOS == "darwin") && checkFdlimit()
!addr.IP.IsLoopback() && !checkedFdLimit { checkedFdLimit = true
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
}
} }
} }
} }
@ -115,6 +106,23 @@ func main() {
app.Wg.Wait() 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. // isLocalhost returns true if the string looks explicitly like a localhost address.
func isLocalhost(s string) bool { func isLocalhost(s string) bool {
return s == "localhost" || s == "::1" || strings.HasPrefix(s, "127.") return s == "localhost" || s == "::1" || strings.HasPrefix(s, "127.")