You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by so...@apache.org on 2014/04/24 19:45:37 UTC
git commit: TS-2736: Add config option to set the max open files
limit for the traffic_server process to some percentage of the fs.file-max
proc value on Linux. The default is 90%.
Repository: trafficserver
Updated Branches:
refs/heads/master eb183eef9 -> 22ed6d8ed
TS-2736: Add config option to set the max open files limit for the traffic_server
process to some percentage of the fs.file-max proc value on Linux. The default is 90%.
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/22ed6d8e
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/22ed6d8e
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/22ed6d8e
Branch: refs/heads/master
Commit: 22ed6d8ed1f63b87e3c9dc419f8ce58555aa6001
Parents: eb183ee
Author: Phil Sorber <so...@apache.org>
Authored: Thu Apr 24 11:43:25 2014 -0600
Committer: Phil Sorber <so...@apache.org>
Committed: Thu Apr 24 11:43:45 2014 -0600
----------------------------------------------------------------------
CHANGES | 3 +++
.../configuration/records.config.en.rst | 4 ++++
lib/perl/lib/Apache/TS/AdminClient.pm | 1 +
mgmt/Main.cc | 24 ++++++++++++++++++++
mgmt/RecordsConfig.cc | 3 +++
proxy/Main.cc | 19 +++++++++++++++-
proxy/config/records.config.default.in | 1 +
7 files changed, 54 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 9f55f55..31d869e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with Apache Traffic Server 5.0.0
+ *) [TS-2736] Add config option to set the max open files limit for the traffic_server
+ process to some percentage of the fs.file-max proc value on Linux. The default is 90%.
+
*) [TS-2741] Add a server intercept example plugins and documentation.
*) [TS-2616] Sanitize duplicate Transfer-Encoding: chunked headers.
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/doc/reference/configuration/records.config.en.rst
----------------------------------------------------------------------
diff --git a/doc/reference/configuration/records.config.en.rst b/doc/reference/configuration/records.config.en.rst
index 556073c..95f547b 100644
--- a/doc/reference/configuration/records.config.en.rst
+++ b/doc/reference/configuration/records.config.en.rst
@@ -257,6 +257,10 @@ Value Effect
This option only has an affect when Traffic Server has been compiled with ``--enable-hwloc``.
+.. ts:cv:: CONFIG proxy.config.system.file_max_pct FLOAT 0.9
+
+ Set the maximum number of file handles for the traffic_server process as a percentage of the the fs.file-max proc value in Linux. The default is 90%.
+
Network
=======
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/lib/perl/lib/Apache/TS/AdminClient.pm
----------------------------------------------------------------------
diff --git a/lib/perl/lib/Apache/TS/AdminClient.pm b/lib/perl/lib/Apache/TS/AdminClient.pm
index 61a0f6a..c7a6d1f 100644
--- a/lib/perl/lib/Apache/TS/AdminClient.pm
+++ b/lib/perl/lib/Apache/TS/AdminClient.pm
@@ -718,6 +718,7 @@ The Apache Traffic Server Administration Manual will explain what these strings
proxy.config.stats.snap_frequency
proxy.config.syslog_facility
proxy.config.system.mmap_max
+ proxy.config.system.file_max_pct
proxy.config.thread.default.stacksize
proxy.config.udp.free_cancelled_pkts_sec
proxy.config.udp.periodic_cleanup
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/mgmt/Main.cc
----------------------------------------------------------------------
diff --git a/mgmt/Main.cc b/mgmt/Main.cc
index ac23d21..8e7cfad 100644
--- a/mgmt/Main.cc
+++ b/mgmt/Main.cc
@@ -311,6 +311,30 @@ set_process_limits(int fds_throttle)
ink_max_out_rlimit(RLIMIT_RSS, true, true);
#endif
+#if defined(linux)
+ float file_max_pct = 0.9;
+ FILE *fd;
+
+ if ((fd = fopen("/proc/sys/fs/file-max","r"))) {
+ fscanf(fd, "%lu", &lim.rlim_max);
+ fclose(fd);
+ REC_ReadConfigFloat(file_max_pct, "proxy.config.system.file_max_pct");
+ lim.rlim_cur = lim.rlim_max = lim.rlim_max * file_max_pct;
+ if (!setrlimit(RLIMIT_NOFILE, &lim) && !getrlimit(RLIMIT_NOFILE, &lim)) {
+ fds_limit = (int) lim.rlim_cur;
+#ifdef MGMT_USE_SYSLOG
+ syslog(LOG_NOTICE, "NOTE: RLIMIT_NOFILE(%d):cur(%d),max(%d)",RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
+ } else {
+ syslog(LOG_NOTICE, "NOTE: Unable to set RLIMIT_NOFILE(%d):cur(%d),max(%d)", RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
+#endif
+ }
+#ifdef MGMT_USE_SYSLOG
+ } else {
+ syslog(LOG_NOTICE, "NOTE: Unable to open /proc/sys/fs/file-max");
+#endif
+ }
+#endif // linux
+
if (!getrlimit(RLIMIT_NOFILE, &lim)) {
if (fds_throttle > (int) (lim.rlim_cur + FD_THROTTLE_HEADROOM)) {
lim.rlim_cur = (lim.rlim_max = (rlim_t) fds_throttle);
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/mgmt/RecordsConfig.cc
----------------------------------------------------------------------
diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
index 7b45602..2d094b5 100644
--- a/mgmt/RecordsConfig.cc
+++ b/mgmt/RecordsConfig.cc
@@ -102,6 +102,9 @@ RecordElement RecordsConfig[] = {
// The maximum number of chunks to allocate with mmap. Setting this to zero disables all use of mmap. (Unix only)
{RECT_CONFIG, "proxy.config.system.mmap_max", RECD_INT, "2097152", RECU_RESTART_TS, RR_NULL, RECC_INT, NULL, RECA_READ_ONLY}
,
+ // The percent of the /proc/sys/fs/file-max value to set the RLIMIT_NOFILE cur/max to
+ {RECT_CONFIG, "proxy.config.system.file_max_pct", RECD_FLOAT, "0.9", RECU_RESTART_TS, RR_NULL, RECC_NULL, NULL, RECA_READ_ONLY}
+ ,
// Traffic Server Execution threads configuration
// By default Traffic Server set number of execution threads equal to total CPUs
{RECT_CONFIG, "proxy.config.exec_thread.autoconfig", RECD_INT, "1", RECU_RESTART_TS, RR_NULL, RECC_INT, "[0-65535]", RECA_READ_ONLY}
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/proxy/Main.cc
----------------------------------------------------------------------
diff --git a/proxy/Main.cc b/proxy/Main.cc
index 32378fb..05affe7 100644
--- a/proxy/Main.cc
+++ b/proxy/Main.cc
@@ -796,12 +796,29 @@ adjust_sys_settings(void)
struct rlimit lim;
int mmap_max = -1;
int fds_throttle = -1;
+ float file_max_pct = 0.9;
+ FILE *fd;
// TODO: I think we might be able to get rid of this?
REC_ReadConfigInteger(mmap_max, "proxy.config.system.mmap_max");
if (mmap_max >= 0)
ats_mallopt(ATS_MMAP_MAX, mmap_max);
+ if ((fd = fopen("/proc/sys/fs/file-max","r"))) {
+ fscanf(fd, "%lu", &lim.rlim_max);
+ fclose(fd);
+ REC_ReadConfigFloat(file_max_pct, "proxy.config.system.file_max_pct");
+ lim.rlim_cur = lim.rlim_max = lim.rlim_max * file_max_pct;
+ if (!setrlimit(RLIMIT_NOFILE, &lim) && !getrlimit(RLIMIT_NOFILE, &lim)) {
+ fds_limit = (int) lim.rlim_cur;
+ syslog(LOG_NOTICE, "NOTE: RLIMIT_NOFILE(%d):cur(%d),max(%d)",RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
+ } else {
+ syslog(LOG_NOTICE, "NOTE: Unable to set RLIMIT_NOFILE(%d):cur(%d),max(%d)", RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
+ }
+ } else {
+ syslog(LOG_NOTICE, "NOTE: Unable to open /proc/sys/fs/file-max");
+ }
+
REC_ReadConfigInteger(fds_throttle, "proxy.config.net.connections_throttle");
if (!getrlimit(RLIMIT_NOFILE, &lim)) {
@@ -809,7 +826,7 @@ adjust_sys_settings(void)
lim.rlim_cur = (lim.rlim_max = (rlim_t) fds_throttle);
if (!setrlimit(RLIMIT_NOFILE, &lim) && !getrlimit(RLIMIT_NOFILE, &lim)) {
fds_limit = (int) lim.rlim_cur;
- syslog(LOG_NOTICE, "NOTE: RLIMIT_NOFILE(%d):cur(%d),max(%d)",RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
+ syslog(LOG_NOTICE, "NOTE: RLIMIT_NOFILE(%d):cur(%d),max(%d)",RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
}
}
}
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/proxy/config/records.config.default.in
----------------------------------------------------------------------
diff --git a/proxy/config/records.config.default.in b/proxy/config/records.config.default.in
index 8086e09..22a2587 100644
--- a/proxy/config/records.config.default.in
+++ b/proxy/config/records.config.default.in
@@ -28,6 +28,7 @@ CONFIG proxy.config.syslog_facility STRING LOG_DAEMON
CONFIG proxy.config.output.logfile STRING traffic.out
CONFIG proxy.config.snapshot_dir STRING snapshots
CONFIG proxy.config.system.mmap_max INT 2097152
+CONFIG proxy.config.system.file_max_pct FLOAT 0.9
##############################################################################
#
# Main threads configuration (worker threads). Also see configurations for
Re: git commit: TS-2736: Add config option to set the max open files
limit for the traffic_server process to some percentage of the fs.file-max
proc value on Linux. The default is 90%.
Posted by James Peach <jp...@apache.org>.
On Apr 24, 2014, at 12:50 PM, James Peach <jp...@apache.org> wrote:
> On Apr 24, 2014, at 10:45 AM, sorber@apache.org wrote:
>
>> Repository: trafficserver
>> Updated Branches:
>> refs/heads/master eb183eef9 -> 22ed6d8ed
>>
>>
>> TS-2736: Add config option to set the max open files limit for the traffic_server
>> process to some percentage of the fs.file-max proc value on Linux. The default is 90%.
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/22ed6d8e
>> Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/22ed6d8e
>> Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/22ed6d8e
>>
>> Branch: refs/heads/master
>> Commit: 22ed6d8ed1f63b87e3c9dc419f8ce58555aa6001
>> Parents: eb183ee
>> Author: Phil Sorber <so...@apache.org>
>> Authored: Thu Apr 24 11:43:25 2014 -0600
>> Committer: Phil Sorber <so...@apache.org>
>> Committed: Thu Apr 24 11:43:45 2014 -0600
>>
>> ----------------------------------------------------------------------
>> CHANGES | 3 +++
>> .../configuration/records.config.en.rst | 4 ++++
>> lib/perl/lib/Apache/TS/AdminClient.pm | 1 +
>> mgmt/Main.cc | 24 ++++++++++++++++++++
>> mgmt/RecordsConfig.cc | 3 +++
>> proxy/Main.cc | 19 +++++++++++++++-
>
> Are you planning to move the duplicate code into a single place in libts? That would be pretty helpful.
One more thing ... this should not use syslog directly. Use the diagnostics API.
J
Re: git commit: TS-2736: Add config option to set the max open files
limit for the traffic_server process to some percentage of the fs.file-max
proc value on Linux. The default is 90%.
Posted by James Peach <jp...@apache.org>.
On Apr 24, 2014, at 12:50 PM, James Peach <jp...@apache.org> wrote:
> On Apr 24, 2014, at 10:45 AM, sorber@apache.org wrote:
>
>> Repository: trafficserver
>> Updated Branches:
>> refs/heads/master eb183eef9 -> 22ed6d8ed
>>
>>
>> TS-2736: Add config option to set the max open files limit for the traffic_server
>> process to some percentage of the fs.file-max proc value on Linux. The default is 90%.
>>
>>
>> Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
>> Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/22ed6d8e
>> Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/22ed6d8e
>> Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/22ed6d8e
>>
>> Branch: refs/heads/master
>> Commit: 22ed6d8ed1f63b87e3c9dc419f8ce58555aa6001
>> Parents: eb183ee
>> Author: Phil Sorber <so...@apache.org>
>> Authored: Thu Apr 24 11:43:25 2014 -0600
>> Committer: Phil Sorber <so...@apache.org>
>> Committed: Thu Apr 24 11:43:45 2014 -0600
>>
>> ----------------------------------------------------------------------
>> CHANGES | 3 +++
>> .../configuration/records.config.en.rst | 4 ++++
>> lib/perl/lib/Apache/TS/AdminClient.pm | 1 +
>> mgmt/Main.cc | 24 ++++++++++++++++++++
>> mgmt/RecordsConfig.cc | 3 +++
>> proxy/Main.cc | 19 +++++++++++++++-
>
> Are you planning to move the duplicate code into a single place in libts? That would be pretty helpful.
One more thing ... this should not use syslog directly. Use the diagnostics API.
J
Re: git commit: TS-2736: Add config option to set the max open files
limit for the traffic_server process to some percentage of the fs.file-max
proc value on Linux. The default is 90%.
Posted by James Peach <jp...@apache.org>.
On Apr 24, 2014, at 10:45 AM, sorber@apache.org wrote:
> Repository: trafficserver
> Updated Branches:
> refs/heads/master eb183eef9 -> 22ed6d8ed
>
>
> TS-2736: Add config option to set the max open files limit for the traffic_server
> process to some percentage of the fs.file-max proc value on Linux. The default is 90%.
>
>
> Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
> Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/22ed6d8e
> Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/22ed6d8e
> Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/22ed6d8e
>
> Branch: refs/heads/master
> Commit: 22ed6d8ed1f63b87e3c9dc419f8ce58555aa6001
> Parents: eb183ee
> Author: Phil Sorber <so...@apache.org>
> Authored: Thu Apr 24 11:43:25 2014 -0600
> Committer: Phil Sorber <so...@apache.org>
> Committed: Thu Apr 24 11:43:45 2014 -0600
>
> ----------------------------------------------------------------------
> CHANGES | 3 +++
> .../configuration/records.config.en.rst | 4 ++++
> lib/perl/lib/Apache/TS/AdminClient.pm | 1 +
> mgmt/Main.cc | 24 ++++++++++++++++++++
> mgmt/RecordsConfig.cc | 3 +++
> proxy/Main.cc | 19 +++++++++++++++-
Are you planning to move the duplicate code into a single place in libts? That would be pretty helpful.
> proxy/config/records.config.default.in | 1 +
> 7 files changed, 54 insertions(+), 1 deletion(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/CHANGES
> ----------------------------------------------------------------------
> diff --git a/CHANGES b/CHANGES
> index 9f55f55..31d869e 100644
> --- a/CHANGES
> +++ b/CHANGES
> @@ -1,6 +1,9 @@
> -*- coding: utf-8 -*-
> Changes with Apache Traffic Server 5.0.0
>
> + *) [TS-2736] Add config option to set the max open files limit for the traffic_server
> + process to some percentage of the fs.file-max proc value on Linux. The default is 90%.
> +
> *) [TS-2741] Add a server intercept example plugins and documentation.
>
> *) [TS-2616] Sanitize duplicate Transfer-Encoding: chunked headers.
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/doc/reference/configuration/records.config.en.rst
> ----------------------------------------------------------------------
> diff --git a/doc/reference/configuration/records.config.en.rst b/doc/reference/configuration/records.config.en.rst
> index 556073c..95f547b 100644
> --- a/doc/reference/configuration/records.config.en.rst
> +++ b/doc/reference/configuration/records.config.en.rst
> @@ -257,6 +257,10 @@ Value Effect
>
> This option only has an affect when Traffic Server has been compiled with ``--enable-hwloc``.
>
> +.. ts:cv:: CONFIG proxy.config.system.file_max_pct FLOAT 0.9
> +
> + Set the maximum number of file handles for the traffic_server process as a percentage of the the fs.file-max proc value in Linux. The default is 90%.
Documentation! Nice!
> +
> Network
> =======
>
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/lib/perl/lib/Apache/TS/AdminClient.pm
> ----------------------------------------------------------------------
> diff --git a/lib/perl/lib/Apache/TS/AdminClient.pm b/lib/perl/lib/Apache/TS/AdminClient.pm
> index 61a0f6a..c7a6d1f 100644
> --- a/lib/perl/lib/Apache/TS/AdminClient.pm
> +++ b/lib/perl/lib/Apache/TS/AdminClient.pm
> @@ -718,6 +718,7 @@ The Apache Traffic Server Administration Manual will explain what these strings
> proxy.config.stats.snap_frequency
> proxy.config.syslog_facility
> proxy.config.system.mmap_max
> + proxy.config.system.file_max_pct
> proxy.config.thread.default.stacksize
> proxy.config.udp.free_cancelled_pkts_sec
> proxy.config.udp.periodic_cleanup
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/mgmt/Main.cc
> ----------------------------------------------------------------------
> diff --git a/mgmt/Main.cc b/mgmt/Main.cc
> index ac23d21..8e7cfad 100644
> --- a/mgmt/Main.cc
> +++ b/mgmt/Main.cc
> @@ -311,6 +311,30 @@ set_process_limits(int fds_throttle)
> ink_max_out_rlimit(RLIMIT_RSS, true, true);
> #endif
>
> +#if defined(linux)
This doesn't need to be #ifdef(linux); just let it fail on systems that don't have the file you need.
I was going to suggest you use sysctl(3), but that doesn't really look more portable. Can you wrap the non-portable stuff in a function in lib/ts/ink_sys_control.cc, then call it from where you need it?
> + float file_max_pct = 0.9;
> + FILE *fd;
> +
> + if ((fd = fopen("/proc/sys/fs/file-max","r"))) {
> + fscanf(fd, "%lu", &lim.rlim_max);
> + fclose(fd);
> + REC_ReadConfigFloat(file_max_pct, "proxy.config.system.file_max_pct");
> + lim.rlim_cur = lim.rlim_max = lim.rlim_max * file_max_pct;
> + if (!setrlimit(RLIMIT_NOFILE, &lim) && !getrlimit(RLIMIT_NOFILE, &lim)) {
> + fds_limit = (int) lim.rlim_cur;
> +#ifdef MGMT_USE_SYSLOG
> + syslog(LOG_NOTICE, "NOTE: RLIMIT_NOFILE(%d):cur(%d),max(%d)",RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
> + } else {
> + syslog(LOG_NOTICE, "NOTE: Unable to set RLIMIT_NOFILE(%d):cur(%d),max(%d)", RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
> +#endif
> + }
> +#ifdef MGMT_USE_SYSLOG
> + } else {
> + syslog(LOG_NOTICE, "NOTE: Unable to open /proc/sys/fs/file-max");
> +#endif
> + }
> +#endif // linux
> +
> if (!getrlimit(RLIMIT_NOFILE, &lim)) {
> if (fds_throttle > (int) (lim.rlim_cur + FD_THROTTLE_HEADROOM)) {
> lim.rlim_cur = (lim.rlim_max = (rlim_t) fds_throttle);
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/mgmt/RecordsConfig.cc
> ----------------------------------------------------------------------
> diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
> index 7b45602..2d094b5 100644
> --- a/mgmt/RecordsConfig.cc
> +++ b/mgmt/RecordsConfig.cc
> @@ -102,6 +102,9 @@ RecordElement RecordsConfig[] = {
> // The maximum number of chunks to allocate with mmap. Setting this to zero disables all use of mmap. (Unix only)
> {RECT_CONFIG, "proxy.config.system.mmap_max", RECD_INT, "2097152", RECU_RESTART_TS, RR_NULL, RECC_INT, NULL, RECA_READ_ONLY}
> ,
> + // The percent of the /proc/sys/fs/file-max value to set the RLIMIT_NOFILE cur/max to
> + {RECT_CONFIG, "proxy.config.system.file_max_pct", RECD_FLOAT, "0.9", RECU_RESTART_TS, RR_NULL, RECC_NULL, NULL, RECA_READ_ONLY}
> + ,
> // Traffic Server Execution threads configuration
> // By default Traffic Server set number of execution threads equal to total CPUs
> {RECT_CONFIG, "proxy.config.exec_thread.autoconfig", RECD_INT, "1", RECU_RESTART_TS, RR_NULL, RECC_INT, "[0-65535]", RECA_READ_ONLY}
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/proxy/Main.cc
> ----------------------------------------------------------------------
> diff --git a/proxy/Main.cc b/proxy/Main.cc
> index 32378fb..05affe7 100644
> --- a/proxy/Main.cc
> +++ b/proxy/Main.cc
> @@ -796,12 +796,29 @@ adjust_sys_settings(void)
> struct rlimit lim;
> int mmap_max = -1;
> int fds_throttle = -1;
> + float file_max_pct = 0.9;
> + FILE *fd;
>
> // TODO: I think we might be able to get rid of this?
> REC_ReadConfigInteger(mmap_max, "proxy.config.system.mmap_max");
> if (mmap_max >= 0)
> ats_mallopt(ATS_MMAP_MAX, mmap_max);
>
> + if ((fd = fopen("/proc/sys/fs/file-max","r"))) {
> + fscanf(fd, "%lu", &lim.rlim_max);
> + fclose(fd);
> + REC_ReadConfigFloat(file_max_pct, "proxy.config.system.file_max_pct");
> + lim.rlim_cur = lim.rlim_max = lim.rlim_max * file_max_pct;
> + if (!setrlimit(RLIMIT_NOFILE, &lim) && !getrlimit(RLIMIT_NOFILE, &lim)) {
> + fds_limit = (int) lim.rlim_cur;
> + syslog(LOG_NOTICE, "NOTE: RLIMIT_NOFILE(%d):cur(%d),max(%d)",RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
> + } else {
> + syslog(LOG_NOTICE, "NOTE: Unable to set RLIMIT_NOFILE(%d):cur(%d),max(%d)", RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
> + }
> + } else {
> + syslog(LOG_NOTICE, "NOTE: Unable to open /proc/sys/fs/file-max");
> + }
> +
> REC_ReadConfigInteger(fds_throttle, "proxy.config.net.connections_throttle");
>
> if (!getrlimit(RLIMIT_NOFILE, &lim)) {
> @@ -809,7 +826,7 @@ adjust_sys_settings(void)
> lim.rlim_cur = (lim.rlim_max = (rlim_t) fds_throttle);
> if (!setrlimit(RLIMIT_NOFILE, &lim) && !getrlimit(RLIMIT_NOFILE, &lim)) {
> fds_limit = (int) lim.rlim_cur;
> - syslog(LOG_NOTICE, "NOTE: RLIMIT_NOFILE(%d):cur(%d),max(%d)",RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
> + syslog(LOG_NOTICE, "NOTE: RLIMIT_NOFILE(%d):cur(%d),max(%d)",RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
> }
> }
> }
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/proxy/config/records.config.default.in
> ----------------------------------------------------------------------
> diff --git a/proxy/config/records.config.default.in b/proxy/config/records.config.default.in
> index 8086e09..22a2587 100644
> --- a/proxy/config/records.config.default.in
> +++ b/proxy/config/records.config.default.in
> @@ -28,6 +28,7 @@ CONFIG proxy.config.syslog_facility STRING LOG_DAEMON
> CONFIG proxy.config.output.logfile STRING traffic.out
> CONFIG proxy.config.snapshot_dir STRING snapshots
> CONFIG proxy.config.system.mmap_max INT 2097152
> +CONFIG proxy.config.system.file_max_pct FLOAT 0.9
> ##############################################################################
> #
> # Main threads configuration (worker threads). Also see configurations for
>
Re: git commit: TS-2736: Add config option to set the max open files
limit for the traffic_server process to some percentage of the fs.file-max
proc value on Linux. The default is 90%.
Posted by James Peach <jp...@apache.org>.
On Apr 24, 2014, at 10:45 AM, sorber@apache.org wrote:
> Repository: trafficserver
> Updated Branches:
> refs/heads/master eb183eef9 -> 22ed6d8ed
>
>
> TS-2736: Add config option to set the max open files limit for the traffic_server
> process to some percentage of the fs.file-max proc value on Linux. The default is 90%.
>
>
> Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
> Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/22ed6d8e
> Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/22ed6d8e
> Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/22ed6d8e
>
> Branch: refs/heads/master
> Commit: 22ed6d8ed1f63b87e3c9dc419f8ce58555aa6001
> Parents: eb183ee
> Author: Phil Sorber <so...@apache.org>
> Authored: Thu Apr 24 11:43:25 2014 -0600
> Committer: Phil Sorber <so...@apache.org>
> Committed: Thu Apr 24 11:43:45 2014 -0600
>
> ----------------------------------------------------------------------
> CHANGES | 3 +++
> .../configuration/records.config.en.rst | 4 ++++
> lib/perl/lib/Apache/TS/AdminClient.pm | 1 +
> mgmt/Main.cc | 24 ++++++++++++++++++++
> mgmt/RecordsConfig.cc | 3 +++
> proxy/Main.cc | 19 +++++++++++++++-
Are you planning to move the duplicate code into a single place in libts? That would be pretty helpful.
> proxy/config/records.config.default.in | 1 +
> 7 files changed, 54 insertions(+), 1 deletion(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/CHANGES
> ----------------------------------------------------------------------
> diff --git a/CHANGES b/CHANGES
> index 9f55f55..31d869e 100644
> --- a/CHANGES
> +++ b/CHANGES
> @@ -1,6 +1,9 @@
> -*- coding: utf-8 -*-
> Changes with Apache Traffic Server 5.0.0
>
> + *) [TS-2736] Add config option to set the max open files limit for the traffic_server
> + process to some percentage of the fs.file-max proc value on Linux. The default is 90%.
> +
> *) [TS-2741] Add a server intercept example plugins and documentation.
>
> *) [TS-2616] Sanitize duplicate Transfer-Encoding: chunked headers.
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/doc/reference/configuration/records.config.en.rst
> ----------------------------------------------------------------------
> diff --git a/doc/reference/configuration/records.config.en.rst b/doc/reference/configuration/records.config.en.rst
> index 556073c..95f547b 100644
> --- a/doc/reference/configuration/records.config.en.rst
> +++ b/doc/reference/configuration/records.config.en.rst
> @@ -257,6 +257,10 @@ Value Effect
>
> This option only has an affect when Traffic Server has been compiled with ``--enable-hwloc``.
>
> +.. ts:cv:: CONFIG proxy.config.system.file_max_pct FLOAT 0.9
> +
> + Set the maximum number of file handles for the traffic_server process as a percentage of the the fs.file-max proc value in Linux. The default is 90%.
Documentation! Nice!
> +
> Network
> =======
>
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/lib/perl/lib/Apache/TS/AdminClient.pm
> ----------------------------------------------------------------------
> diff --git a/lib/perl/lib/Apache/TS/AdminClient.pm b/lib/perl/lib/Apache/TS/AdminClient.pm
> index 61a0f6a..c7a6d1f 100644
> --- a/lib/perl/lib/Apache/TS/AdminClient.pm
> +++ b/lib/perl/lib/Apache/TS/AdminClient.pm
> @@ -718,6 +718,7 @@ The Apache Traffic Server Administration Manual will explain what these strings
> proxy.config.stats.snap_frequency
> proxy.config.syslog_facility
> proxy.config.system.mmap_max
> + proxy.config.system.file_max_pct
> proxy.config.thread.default.stacksize
> proxy.config.udp.free_cancelled_pkts_sec
> proxy.config.udp.periodic_cleanup
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/mgmt/Main.cc
> ----------------------------------------------------------------------
> diff --git a/mgmt/Main.cc b/mgmt/Main.cc
> index ac23d21..8e7cfad 100644
> --- a/mgmt/Main.cc
> +++ b/mgmt/Main.cc
> @@ -311,6 +311,30 @@ set_process_limits(int fds_throttle)
> ink_max_out_rlimit(RLIMIT_RSS, true, true);
> #endif
>
> +#if defined(linux)
This doesn't need to be #ifdef(linux); just let it fail on systems that don't have the file you need.
I was going to suggest you use sysctl(3), but that doesn't really look more portable. Can you wrap the non-portable stuff in a function in lib/ts/ink_sys_control.cc, then call it from where you need it?
> + float file_max_pct = 0.9;
> + FILE *fd;
> +
> + if ((fd = fopen("/proc/sys/fs/file-max","r"))) {
> + fscanf(fd, "%lu", &lim.rlim_max);
> + fclose(fd);
> + REC_ReadConfigFloat(file_max_pct, "proxy.config.system.file_max_pct");
> + lim.rlim_cur = lim.rlim_max = lim.rlim_max * file_max_pct;
> + if (!setrlimit(RLIMIT_NOFILE, &lim) && !getrlimit(RLIMIT_NOFILE, &lim)) {
> + fds_limit = (int) lim.rlim_cur;
> +#ifdef MGMT_USE_SYSLOG
> + syslog(LOG_NOTICE, "NOTE: RLIMIT_NOFILE(%d):cur(%d),max(%d)",RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
> + } else {
> + syslog(LOG_NOTICE, "NOTE: Unable to set RLIMIT_NOFILE(%d):cur(%d),max(%d)", RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
> +#endif
> + }
> +#ifdef MGMT_USE_SYSLOG
> + } else {
> + syslog(LOG_NOTICE, "NOTE: Unable to open /proc/sys/fs/file-max");
> +#endif
> + }
> +#endif // linux
> +
> if (!getrlimit(RLIMIT_NOFILE, &lim)) {
> if (fds_throttle > (int) (lim.rlim_cur + FD_THROTTLE_HEADROOM)) {
> lim.rlim_cur = (lim.rlim_max = (rlim_t) fds_throttle);
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/mgmt/RecordsConfig.cc
> ----------------------------------------------------------------------
> diff --git a/mgmt/RecordsConfig.cc b/mgmt/RecordsConfig.cc
> index 7b45602..2d094b5 100644
> --- a/mgmt/RecordsConfig.cc
> +++ b/mgmt/RecordsConfig.cc
> @@ -102,6 +102,9 @@ RecordElement RecordsConfig[] = {
> // The maximum number of chunks to allocate with mmap. Setting this to zero disables all use of mmap. (Unix only)
> {RECT_CONFIG, "proxy.config.system.mmap_max", RECD_INT, "2097152", RECU_RESTART_TS, RR_NULL, RECC_INT, NULL, RECA_READ_ONLY}
> ,
> + // The percent of the /proc/sys/fs/file-max value to set the RLIMIT_NOFILE cur/max to
> + {RECT_CONFIG, "proxy.config.system.file_max_pct", RECD_FLOAT, "0.9", RECU_RESTART_TS, RR_NULL, RECC_NULL, NULL, RECA_READ_ONLY}
> + ,
> // Traffic Server Execution threads configuration
> // By default Traffic Server set number of execution threads equal to total CPUs
> {RECT_CONFIG, "proxy.config.exec_thread.autoconfig", RECD_INT, "1", RECU_RESTART_TS, RR_NULL, RECC_INT, "[0-65535]", RECA_READ_ONLY}
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/proxy/Main.cc
> ----------------------------------------------------------------------
> diff --git a/proxy/Main.cc b/proxy/Main.cc
> index 32378fb..05affe7 100644
> --- a/proxy/Main.cc
> +++ b/proxy/Main.cc
> @@ -796,12 +796,29 @@ adjust_sys_settings(void)
> struct rlimit lim;
> int mmap_max = -1;
> int fds_throttle = -1;
> + float file_max_pct = 0.9;
> + FILE *fd;
>
> // TODO: I think we might be able to get rid of this?
> REC_ReadConfigInteger(mmap_max, "proxy.config.system.mmap_max");
> if (mmap_max >= 0)
> ats_mallopt(ATS_MMAP_MAX, mmap_max);
>
> + if ((fd = fopen("/proc/sys/fs/file-max","r"))) {
> + fscanf(fd, "%lu", &lim.rlim_max);
> + fclose(fd);
> + REC_ReadConfigFloat(file_max_pct, "proxy.config.system.file_max_pct");
> + lim.rlim_cur = lim.rlim_max = lim.rlim_max * file_max_pct;
> + if (!setrlimit(RLIMIT_NOFILE, &lim) && !getrlimit(RLIMIT_NOFILE, &lim)) {
> + fds_limit = (int) lim.rlim_cur;
> + syslog(LOG_NOTICE, "NOTE: RLIMIT_NOFILE(%d):cur(%d),max(%d)",RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
> + } else {
> + syslog(LOG_NOTICE, "NOTE: Unable to set RLIMIT_NOFILE(%d):cur(%d),max(%d)", RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
> + }
> + } else {
> + syslog(LOG_NOTICE, "NOTE: Unable to open /proc/sys/fs/file-max");
> + }
> +
> REC_ReadConfigInteger(fds_throttle, "proxy.config.net.connections_throttle");
>
> if (!getrlimit(RLIMIT_NOFILE, &lim)) {
> @@ -809,7 +826,7 @@ adjust_sys_settings(void)
> lim.rlim_cur = (lim.rlim_max = (rlim_t) fds_throttle);
> if (!setrlimit(RLIMIT_NOFILE, &lim) && !getrlimit(RLIMIT_NOFILE, &lim)) {
> fds_limit = (int) lim.rlim_cur;
> - syslog(LOG_NOTICE, "NOTE: RLIMIT_NOFILE(%d):cur(%d),max(%d)",RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
> + syslog(LOG_NOTICE, "NOTE: RLIMIT_NOFILE(%d):cur(%d),max(%d)",RLIMIT_NOFILE, (int)lim.rlim_cur, (int)lim.rlim_max);
> }
> }
> }
>
> http://git-wip-us.apache.org/repos/asf/trafficserver/blob/22ed6d8e/proxy/config/records.config.default.in
> ----------------------------------------------------------------------
> diff --git a/proxy/config/records.config.default.in b/proxy/config/records.config.default.in
> index 8086e09..22a2587 100644
> --- a/proxy/config/records.config.default.in
> +++ b/proxy/config/records.config.default.in
> @@ -28,6 +28,7 @@ CONFIG proxy.config.syslog_facility STRING LOG_DAEMON
> CONFIG proxy.config.output.logfile STRING traffic.out
> CONFIG proxy.config.snapshot_dir STRING snapshots
> CONFIG proxy.config.system.mmap_max INT 2097152
> +CONFIG proxy.config.system.file_max_pct FLOAT 0.9
> ##############################################################################
> #
> # Main threads configuration (worker threads). Also see configurations for
>