From: Willy Tarreau Date: Mon, 29 Jan 2018 14:06:04 +0000 (+0100) Subject: MINOR: fd: don't report maxfd in alert messages X-Git-Tag: v1.9-dev1~480 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c5532acb4de1f3cce4138572c11ffa5d78339193;p=thirdparty%2Fhaproxy.git MINOR: fd: don't report maxfd in alert messages The listeners and connectors may complain that process-wide or system-wide FD limits have been reached and will in this case report maxfd as the limit. This is wrong in fact since there's no reason for the whole FD space to be contiguous when the total # of FD is reached. A better approach would consist in reporting the accurate number of opened FDs, but this is pointless as what matters here is to give a hint about what might be wrong. So let's simply report the configured maxsock, which will generally explain why the process' limits were reached, which is the most common reason. This removes another dependency on maxfd. --- diff --git a/src/listener.c b/src/listener.c index fd70726846..f60a14624f 100644 --- a/src/listener.c +++ b/src/listener.c @@ -570,21 +570,21 @@ void listener_accept(int fd) case ENFILE: if (p) send_log(p, LOG_EMERG, - "Proxy %s reached system FD limit at %d. Please check system tunables.\n", - p->id, maxfd); + "Proxy %s reached system FD limit (maxsock=%d). Please check system tunables.\n", + p->id, global.maxsock); goto transient_error; case EMFILE: if (p) send_log(p, LOG_EMERG, - "Proxy %s reached process FD limit at %d. Please check 'ulimit-n' and restart.\n", - p->id, maxfd); + "Proxy %s reached process FD limit (maxsock=%d). Please check 'ulimit-n' and restart.\n", + p->id, global.maxsock); goto transient_error; case ENOBUFS: case ENOMEM: if (p) send_log(p, LOG_EMERG, - "Proxy %s reached system memory limit at %d sockets. Please check system tunables.\n", - p->id, maxfd); + "Proxy %s reached system memory limit (maxsock=%d). Please check system tunables.\n", + p->id, global.maxsock); goto transient_error; default: /* unexpected result, let's give up and let other tasks run */ diff --git a/src/proto_tcp.c b/src/proto_tcp.c index 857ebe133c..f4ff698fd5 100644 --- a/src/proto_tcp.c +++ b/src/proto_tcp.c @@ -314,20 +314,20 @@ int tcp_connect_server(struct connection *conn, int data, int delack) if (errno == ENFILE) { conn->err_code = CO_ER_SYS_FDLIM; send_log(be, LOG_EMERG, - "Proxy %s reached system FD limit at %d. Please check system tunables.\n", - be->id, maxfd); + "Proxy %s reached system FD limit (maxsock=%d). Please check system tunables.\n", + be->id, global.maxsock); } else if (errno == EMFILE) { conn->err_code = CO_ER_PROC_FDLIM; send_log(be, LOG_EMERG, - "Proxy %s reached process FD limit at %d. Please check 'ulimit-n' and restart.\n", - be->id, maxfd); + "Proxy %s reached process FD limit (maxsock=%d). Please check 'ulimit-n' and restart.\n", + be->id, global.maxsock); } else if (errno == ENOBUFS || errno == ENOMEM) { conn->err_code = CO_ER_SYS_MEMLIM; send_log(be, LOG_EMERG, - "Proxy %s reached system memory limit at %d sockets. Please check system tunables.\n", - be->id, maxfd); + "Proxy %s reached system memory limit (maxsock=%d). Please check system tunables.\n", + be->id, global.maxsock); } else if (errno == EAFNOSUPPORT || errno == EPROTONOSUPPORT) { conn->err_code = CO_ER_NOPROTO; diff --git a/src/proto_uxst.c b/src/proto_uxst.c index 1579dd0eb9..754acd2c7d 100644 --- a/src/proto_uxst.c +++ b/src/proto_uxst.c @@ -452,20 +452,20 @@ static int uxst_connect_server(struct connection *conn, int data, int delack) if (errno == ENFILE) { conn->err_code = CO_ER_SYS_FDLIM; send_log(be, LOG_EMERG, - "Proxy %s reached system FD limit at %d. Please check system tunables.\n", - be->id, maxfd); + "Proxy %s reached system FD limit (maxsock=%d). Please check system tunables.\n", + be->id, global.maxsock); } else if (errno == EMFILE) { conn->err_code = CO_ER_PROC_FDLIM; send_log(be, LOG_EMERG, - "Proxy %s reached process FD limit at %d. Please check 'ulimit-n' and restart.\n", - be->id, maxfd); + "Proxy %s reached process FD limit (maxsock=%d). Please check 'ulimit-n' and restart.\n", + be->id, global.maxsock); } else if (errno == ENOBUFS || errno == ENOMEM) { conn->err_code = CO_ER_SYS_MEMLIM; send_log(be, LOG_EMERG, - "Proxy %s reached system memory limit at %d sockets. Please check system tunables.\n", - be->id, maxfd); + "Proxy %s reached system memory limit (maxsock=%d). Please check system tunables.\n", + be->id, global.maxsock); } else if (errno == EAFNOSUPPORT || errno == EPROTONOSUPPORT) { conn->err_code = CO_ER_NOPROTO;