]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: fd: don't report maxfd in alert messages
authorWilly Tarreau <w@1wt.eu>
Mon, 29 Jan 2018 14:06:04 +0000 (15:06 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 29 Jan 2018 14:18:54 +0000 (15:18 +0100)
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.

src/listener.c
src/proto_tcp.c
src/proto_uxst.c

index fd70726846e5db7d7eb3f913330dfd8420b29f24..f60a14624fa15f09eef6ba1f19b703ab0a5789e9 100644 (file)
@@ -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 */
index 857ebe133cd276a1558acdcb1b4601ec412131f2..f4ff698fd542dd97cbe9177a774037278fcb3803 100644 (file)
@@ -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;
index 1579dd0eb98ccecbf07b9b2f3fdbbc12899dc795..754acd2c7dfc95aa0365ce48d1117cac9bce1176 100644 (file)
@@ -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;