{"id":37108,"date":"2023-06-06T11:57:18","date_gmt":"2024-02-25T14:17:00","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/"},"modified":"2024-04-30T07:34:25","modified_gmt":"2024-04-29T23:34:25","slug":"apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/","title":{"rendered":"Apache \u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09"},"content":{"rendered":"<h1>\u81ea\u52a8\u8ba1\u7b97 Apache \u7684 MaxClients \u914d\u7f6e\u503c\u3002<\/h1>\n<p>MySQLTuner \u662f\u4e00\u4e2a\u8457\u540d\u7684\u811a\u672c\uff0c\u7528\u4e8e\u652f\u6301 MySQL \u7684\u8c03\u4f18\u3002\u4e0e\u6b64\u7c7b\u4f3c\uff0c\u5728\u7c7b\u4f3c\u7684\u601d\u8def\u4e0b\uff0c\u8fd8\u6709\u4e00\u4e2a\u811a\u672c\u53ef\u4ee5\u81ea\u52a8\u8ba1\u7b97 Apache \u7684 MaxClients\uff08Apache 2.4 \u4ee5\u540e\u4e3a MaxRequestWorkers\uff09\u7684\u8bbe\u7f6e\u503c\u3002<\/p>\n<p>\u8bf7\u53c2\u9605\u300aApache MaxClients\u7684\u9002\u5f53\u503c\u300b\u4e2d\u5bf9MaxClients\u6700\u4f73\u503c\u7684\u8ba8\u8bba\u3002<\/p>\n<h2>\u56fd\u4ea7\u54c1<\/h2>\n<p>\u6d77\u5916\u5236\u9020\u7684Apache2 Buddy\u53ef\u80fd\u662f\u6700\u63a5\u8fd1\u7684\u9009\u9879\uff0c\u4f46\u4f3c\u4e4e\u53ea\u8fdb\u884c\u4e86\u7b80\u5355\u8ba1\u7b97\uff0c\u6ca1\u6709\u8003\u8651\u5b50\u8fdb\u7a0b\u7684\u5171\u4eab\u5185\u5b58\u7b49\u3002\u7ed3\u679c\u662fMaxClients\u7684\u503c\u8f83\u5c0f\uff0c\u56e0\u6b64\u5982\u679c\u5e0c\u671b\u5b89\u5168\u8bbe\u7f6e\uff0c\u5219\u53ef\u4ee5\u4f7f\u7528\u5b83\u3002\u867d\u7136\u6211\u8ba4\u4e3aRemaining Memory\u7684\u8ba1\u7b97\u53ea\u6d89\u53ca\u7279\u5b9a\u670d\u52a1\u7684\u9664\u6cd5\u8fd0\u7b97\uff0c\u4f46\u5206\u6bcd\u7684\u5185\u5b58\u91cf\u53ef\u80fd\u8f83\u5927\uff0c\u5bfc\u81f4\u7ed3\u679c\u53d8\u5f97\u5f88\u5927\uff0c\u6240\u4ee5\u8bf7\u6ce8\u610f\u3002<\/p>\n<pre class=\"post-pre\"><code>        Your server's physical RAM:                                   993 MB\r\n        Remaining Memory after other services considered:             993 MB\r\n        Apache's MaxClients directive:                                256       &lt;--------- Current Setting\r\n        Apache MPM Model:                                             prefork\r\n[ !! ]  Your MaxRequestWorkers setting is too high.\r\n        Your recommended MaxRequestWorkers setting is between 168 and 187.      &lt;------- Acceptable Range (10% of MAX)\r\n        Max potential memory usage:                                   1354 MB\r\n        Percentage of TOTAL RAM allocated to Apache:                  136.38  %\r\n        Percentage of REMAINING RAM allocated to Apache:              136.38  %\r\n<\/code><\/pre>\n<h2>\u5b50\u8fdb\u7a0b\u7684\u5185\u5b58\u8f93\u51fa<\/h2>\n<p>\u5728\u5b50\u8fdb\u7a0b\u7684\u5185\u5b58\u8f93\u51fa\u4e2d\uff0cnone_shared_memory_fetcher.pl\u662f\u6839\u636e\u4f0a\u85e4\u76f4\u4e5f\u5148\u751f\u7684\u6587\u7ae0\u4e2d\u8457\u540d\u7684shared_memory_size.pl\u7684\u6d41\u7a0b\u6765\u8ba1\u7b97\u5b50\u8fdb\u7a0b\u7684\u975e\u5171\u4eab\u5185\u5b58\u7684\uff0c\u4f46\u662fMaxClients\u7684\u503c\u9700\u8981\u81ea\u884c\u8ba1\u7b97\u3002<\/p>\n<pre class=\"post-pre\"><code>PID     RSS     SHARED          NONE_SHARED\r\n12538   3780    3072 (81%)      708\r\n12540   3048    2836 (93%)      212\r\n12541   3060    2840 (92%)      220\r\n12542   3152    2908 (92%)      244\r\n12543   3060    2840 (92%)      220\r\n<\/code><\/pre>\n<h2>\u81ea\u52a8\u8ba1\u7b97<\/h2>\n<p>\u5982\u679c\u60a8\u60f3\u5c3d\u529b\u653b\u5173\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528 get_max_clients.sh \u6765\u81ea\u52a8\u8ba1\u7b97\u8003\u8651\u4e86\u5b50\u8fdb\u7a0b\u5171\u4eab\u5185\u5b58\u7684 MaxClients \u6570\u503c\u3002\u5c3d\u7ba1\u5b83\u5e76\u4e0d\u5b8c\u7f8e\uff0c\u4f46\u8fd9\u53ef\u80fd\u662f\u4e00\u4e2a\u4e0d\u9519\u7684\u9009\u62e9\u3002<\/p>\n<pre class=\"post-pre\"><code>Memory Total \/ (Rss Average - Shr Average) = 1020076 \/ (3626 - 3263)\r\nMemory Free  \/ (Rss Average - Shr Average) = 635560 \/ (3626 - 3263)\r\nMaxClients = 1750 ~ 2810\r\n<\/code><\/pre>\n<h1>\u51fa\u7684\u7522\u54c1<\/h1>\n<h2>Apachetuner.sh \u7684\u4e2d\u6587\u7ffb\u8bd1\uff1aApachetuner.sh<\/h2>\n<p>Gustav Maskowitz\uff08@gusmaskowitz\uff09\u7684\u6982\u5ff5\u8bb0\u5f55\u4f5c\u4e3a\u4e00\u4e2aShell\u811a\u672c\u3002\u5df2\u88ab\u4ed6\u540e\u6765\u63d0\u5230\u7684Apachebuddy.pl\u66ff\u4ee3\u3002<\/p>\n<pre class=\"post-pre\"><code>curl <span class=\"nt\">-sL<\/span> https:\/\/raw.githubusercontent.com\/gusmaskowitz\/apachetuner\/master\/apachetuner.sh | sh\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>=========================SYSTEM=========================\r\nCentOS release 6.8 (Final)\r\n\r\nServer Name:                    localhost.localdomain\r\nTotal Physical Memory:          996 MB\r\n\r\n=========================APACHE=========================\r\nVersion:                        Apache\/2.2.15 (Unix)\r\nRPM:                            httpd-2.2.15-53.el6.centos.x86_64\r\nhttpd binary:                   \/usr\/sbin\/httpd\r\nWhats running on port 80        12538\/httpd\r\nApache Architecture:            64-bit\r\nServerlimit is:                 256\r\nMaxClients is:                  256\r\nhttpd root                      \/etc\/httpd\r\nhttpd server config file        \/etc\/httpd\/conf\/httpd.conf\r\nhttpd default errorlog          \/etc\/httpd\/logs\/error_log\r\n\r\n=========================PHP============================\r\n\/etc\/php.ini memory_limit is:   128M\r\n\r\n=====================APACHE RUNTIME=====================\r\nApache user:                    apache\r\nAverage Memory use:             2.07 MB per child\r\nNumber of children:             8\r\n\r\n=========================REPORT==========================\r\nCurrent memory footprint        16.56 MB\r\nMaximum memory footprint        529.92 MB (53% of installed RAM)\r\n\r\nSystem memory divided by MaxClients             4\r\nSystem memory divided by Apache child size      481\r\n<\/code><\/pre>\n<h2>\u963f\u5e15\u5947\u5c0f\u4f19\u4f34<\/h2>\n<p>Apache Buddy\u662f\u7531Gustav Maskowitz\uff08gusmaskowitz\uff09\u521b\u5efa\u7684\uff0c\u4f5c\u4e3aapachetuner.sh\u7684\u66ff\u4ee3\u54c1\uff0c\u4f46\u7531\u4e8eohaio-solo\u5df2\u7ecf\u5b9e\u65bd\u4e86\u76f8\u540c\u7684\u529f\u80fd\uff0c\u56e0\u6b64\u5b83\u4e0d\u518d\u8fdb\u884c\u79ef\u6781\u7684\u5f00\u53d1\u3002<\/p>\n<pre class=\"post-pre\"><code>curl <span class=\"nt\">-sL<\/span> apachebuddy.pl | perl\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>########################################################################\r\n# Apache Buddy v 0.3 ###################################################\r\n########################################################################\r\nGathering information...\r\nWe are checking the service running on port 80\r\nThe process listening on port 80 is \/usr\/sbin\/httpd\r\nThe process running on port 80 is Apache\/2.2.15 (Unix)\r\nApache has been running 0d 0h 18m 39s\r\nThe full path to the Apache config file is: \/etc\/httpd\/conf\/httpd.conf\r\nApache is using prefork model\r\n\r\nExamining your Apache configuration...\r\nApache runs as apache\r\nYour max clients setting is 256\r\n\r\nAnalyzing memory use...\r\nYour server has 996 MB of memory\r\nThe largest apache process is using 2.08 MB of memory\r\nThe smallest apache process is using 2.08 MB of memory\r\nThe average apache process is using 2.08 MB of memory\r\nGoing by the average Apache process, Apache can potentially use 532.49 MB RAM (53.47 % of available RAM)\r\nGoing by the largest Apache process, Apache can potentially use 532.49 MB RAM (53.47 % of available RAM)\r\n\r\nGenerating reports...\r\n### GENERAL REPORT ###\r\n\r\nSettings considered for this report:\r\n\r\n        Your server's physical RAM:             996MB\r\n        Apache's MaxClients directive:          256\r\n        Apache MPM Model:                       prefork\r\n        Largest Apache process (by memory):     2.08MB\r\n[ OK ]  Your MaxClients setting is within an acceptable range.\r\n        Max potential memory usage:             532.48 MB\r\n\r\n        Percentage of RAM allocated to Apache   53.47 %\r\n\r\n-----------------------------------------------------------------------\r\n-----------------------------------------------------------------------\r\n<\/code><\/pre>\n<h3>\u4ea8\u5229\u00b7\u738b\uff08somethingweird\uff09\u5f18<\/h3>\n<p>CentOS 7.0 &#8211; Apache 2.4.6 \u517c\u5bb9\u8865\u4e01\u7248\u672c\u9002\u7528\u4e8e apachebuddy.pl\u3002<\/p>\n<pre class=\"post-pre\"><code>curl https:\/\/raw.githubusercontent.com\/somethingweird\/apachebuddy.pl\/master\/apachebuddy.pl | perl\r\n<\/code><\/pre>\n<h2>Apache2 \u4f19\u4f34<\/h2>\n<p>\u7406\u67e5\u5fb7\u00b7\u798f\u65af\uff08@richardforth\uff09\u5bf9Apache Buddy\u7684\u4fee\u6539\u7248\u672c\u3002<br \/>\n\u8be5\u7248\u672c\u5c06\u7269\u7406\u5185\u5b58\u9664\u4ee5Apache\u8fdb\u7a0b\u7684\u5e73\u5747\u5185\u5b58\uff0c\u5e76\u5c06\u5176\u768490\uff05\u4f5c\u4e3aMaxClients\u7684\u5bb9\u5fcd\u8303\u56f4\uff0c\u4e0d\u8003\u8651\u5b50\u8fdb\u7a0b\u7684\u5171\u4eab\u5185\u5b58\u7b49\u3002<br \/>\n\u7531\u4e8e\u4f7f\u7528\u4e86netstat\u547d\u4ee4\uff0c\u56e0\u6b64\u5728RHEL \/ CentOS 7.x\u4e0a\u9700\u8981\u4e8b\u5148\u6267\u884cyum install net-tools\u6765\u5b89\u88c5\u3002<\/p>\n<pre class=\"post-pre\"><code>curl <span class=\"nt\">-sL<\/span> apache2buddy.pl <span class=\"nt\">-o<\/span> apache2buddy.pl\r\nperl apache2buddy.pl <span class=\"nt\">-r<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>[ CRITICAL ] Going by the average Apache process, Apache can potentially use 1354.25 MB RAM:\r\n                Without considering services: 136.38 % of total installed RAM\r\n                Considering extra services: 136.38 % of remaining RAM\r\n[ CRITICAL ] Going by the largest Apache process, Apache can potentially use 1354.25 MB RAM:\r\n                Without considering services: 136.38 % of total installed RAM\r\n                Considering extra services: 136.38 % of remaining RAM\r\n--------------------------------------------------------------------------------\r\nApache2buddy.pl report for server: localhost (14.3.31.162):\r\n\r\nSettings considered for this report:\r\n\r\n        Your server's physical RAM:                                   993 MB\r\n        Remaining Memory after other services considered:             993 MB\r\n        Apache's MaxClients directive:                                256       &lt;--------- Current Setting\r\n        Apache MPM Model:                                             prefork\r\n[ !! ]  Your MaxRequestWorkers setting is too high.\r\n        Your recommended MaxRequestWorkers setting is between 168 and 187.      &lt;------- Acceptable Range (10% of MAX)\r\n        Max potential memory usage:                                   1354 MB\r\n        Percentage of TOTAL RAM allocated to Apache:                  136.38  %\r\n        Percentage of REMAINING RAM allocated to Apache:              136.38  %\r\n--------------------------------------------------------------------------------\r\n<\/code><\/pre>\n<h1>\u5b50\u8fdb\u7a0b\u5185\u5b58\u8f93\u51fa<\/h1>\n<h2>\u5171\u4eab\u5185\u5b58\u5927\u5c0f.pl\uff08naoya\u7248\uff09<\/h2>\n<p>\u4f7f\u7528Linux::Smaps\u7684\u811a\u672cshared_memory_size.pl\u7ecf\u5e38\u88ab\u5f15\u7528\uff0c\u4f46\u662f\u4e3a\u4e86\u65b9\u4fbf\uff0c\u6700\u597d\u4f7f\u7528\u5176\u4ed6\u811a\u672c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">cat<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"no\">_EOF_<\/span><span class=\"sh\"> &gt; shared_memory_size.pl\r\n#!\/usr\/bin\/env perl\r\nuse strict;\r\nuse warnings;\r\nuse Linux::Smaps;\r\n\r\n@ARGV or die \"usage: %0 [pid ...]\";\r\n\r\nprintf \"PID<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">RSS<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">SHARED<\/span><span class=\"se\">\\n<\/span><span class=\"sh\">\";\r\n\r\nfor my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid (@ARGV) {\r\n    my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">map = Linux::Smaps-&gt;new(<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid);\r\n    unless (<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">map) {\r\n        warn <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">!;\r\n        next;\r\n    }\r\n\r\n    printf\r\n        \"%d<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d (%d%%)<\/span><span class=\"se\">\\n<\/span><span class=\"sh\">\",\r\n        <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid,\r\n        <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">map-&gt;rss,\r\n        <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">map-&gt;shared_dirty + <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">map-&gt;shared_clean,\r\n        int(((<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">map-&gt;shared_dirty + <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">map-&gt;shared_clean) \/ <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">map-&gt;rss) * 100)\r\n}\r\n<\/span><span class=\"no\">_EOF_\r\n<\/span><\/code><\/pre>\n<pre class=\"post-pre\"><code>perl shared_memory_size.pl <span class=\"sb\">`<\/span>pgrep httpd<span class=\"sb\">`<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>PID     RSS     SHARED\r\n4847    8272    6180 <span class=\"o\">(<\/span>74%<span class=\"o\">)<\/span>\r\n4876    5544    5292 <span class=\"o\">(<\/span>95%<span class=\"o\">)<\/span>\r\n4935    5544    5292 <span class=\"o\">(<\/span>95%<span class=\"o\">)<\/span>\r\n4976    5544    5292 <span class=\"o\">(<\/span>95%<span class=\"o\">)<\/span>\r\n4999    5544    5292 <span class=\"o\">(<\/span>95%<span class=\"o\">)<\/span>\r\n<\/code><\/pre>\n<h2>shared_memory_size.pl (yumatsumo\u7248\u672c)<\/h2>\n<p>Linux::Smaps \u65e0\u7528\u7248\u672c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">cat<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"no\">_EOF_<\/span><span class=\"sh\"> &gt; shared_memory_size.pl\r\n#!\/bin\/env perl\r\n\r\nuse strict;\r\nuse warnings;\r\n\r\nuse List::Util ();\r\n\r\n@ARGV or die \"usage: %0 [pid ...]\";\r\n\r\nmy @output;\r\n\r\nfor my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid (@ARGV) {\r\n   die \"invalid pid '<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid'\" if <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid =~ \/<\/span><span class=\"se\">\\D<\/span><span class=\"sh\">\/;\r\n   my @smaps = <\/span><span class=\"se\">\\`<\/span><span class=\"sh\">cat \/proc\/<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid\/smaps<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">;\r\n   die if <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">? != 0;\r\n   my @shared = map { \/(<\/span><span class=\"se\">\\d<\/span><span class=\"sh\">+)<\/span><span class=\"se\">\\s<\/span><span class=\"sh\">+kB\/; <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">1 } grep { \/^Shared_(Clean|Dirty)\/ } @smaps;\r\n   my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">shared_total = List::Util::sum(@shared);\r\n   my @rss = map { \/(<\/span><span class=\"se\">\\d<\/span><span class=\"sh\">+)<\/span><span class=\"se\">\\s<\/span><span class=\"sh\">+kB\/; <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">1 } grep { \/^Rss\/ } @smaps;\r\n   my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">rss_total = List::Util::sum(@rss);\r\n   my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">parcent = sprintf '(%d %%)', int((<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">shared_total \/ <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">rss_total) * 100);\r\n   push @output, [<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid, <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">rss_total, <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">parcent];\r\n}\r\n\r\nunshift @output, [qw(PID RSS SHARED)];\r\n\r\nfor my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">out (@output) {\r\n    print join \"<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">\", @<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">out;\r\n    print \"<\/span><span class=\"se\">\\n<\/span><span class=\"sh\">\";\r\n}\r\n<\/span><span class=\"no\">_EOF_\r\n<\/span><\/code><\/pre>\n<pre class=\"post-pre\"><code>perl shared_memory_size.pl <span class=\"sb\">`<\/span>pgrep httpd<span class=\"sb\">`<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>PID     RSS     SHARED\r\n2505    3460    <span class=\"o\">(<\/span>75 %<span class=\"o\">)<\/span>\r\n2506    2960    <span class=\"o\">(<\/span>93 %<span class=\"o\">)<\/span>\r\n2507    2960    <span class=\"o\">(<\/span>93 %<span class=\"o\">)<\/span>\r\n2508    2960    <span class=\"o\">(<\/span>93 %<span class=\"o\">)<\/span>\r\n2509    2960    <span class=\"o\">(<\/span>93 %<span class=\"o\">)<\/span>\r\n2510    2960    <span class=\"o\">(<\/span>93 %<span class=\"o\">)<\/span>\r\n<\/code><\/pre>\n<h2>\u83b7\u53d6\u5185\u5b58.sh \/ \u83b7\u53d6\u5171\u4eab\u5185\u5b58.sh.<\/h2>\n<p>\u8c03\u67e5Apache\u7684\u5185\u5b58\u4f7f\u7528\u91cf &#8211; satooshi@blog<\/p>\n<h4>\u8fd0\u884cgetmem.sh<\/h4>\n<pre class=\"post-pre\"><code><span class=\"nb\">cat<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"no\">_EOF_<\/span><span class=\"sh\"> &gt; getmem.sh\r\n#!\/bin\/sh\r\n\r\n#1 process name\r\nif [ <\/span><span class=\"se\">\\$<\/span><span class=\"sh\"># -ne 1 ]; then\r\n  exit\r\nfi\r\n\r\n# print header\r\nprintf \"PID<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">VmPeak<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">VmSize<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">VmHWM<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">VmRSS<\/span><span class=\"se\">\\n<\/span><span class=\"sh\">\"\r\n\r\n# get memory size\r\npid=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">pgrep <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">1<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n\r\nfor p in <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid\r\ndo\r\n  if [ -f \/proc\/<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">p\/status ]; then\r\n    vm=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">grep -e '^VmPeak:<\/span><span class=\"se\">\\|<\/span><span class=\"sh\">VmSize:<\/span><span class=\"se\">\\|<\/span><span class=\"sh\">VmHWM:<\/span><span class=\"se\">\\|<\/span><span class=\"sh\">VmRSS:' \/proc\/<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">p\/status | awk '{print <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">2}'<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n    printf \"%d<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d<\/span><span class=\"se\">\\n<\/span><span class=\"sh\">\" <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">p <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">vm\r\n  fi\r\ndone\r\n<\/span><span class=\"no\">_EOF_\r\n<\/span><\/code><\/pre>\n<pre class=\"post-pre\"><code>sh getmem.sh httpd\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>PID     VmPeak  VmSize  VmHWM   VmRSS\r\n2193    307688  307688  11828   11828\r\n2194    307708  307688  6096    6096\r\n2195    307708  307688  6096    6096\r\n2196    307708  307688  6096    6096\r\n2197    307708  307688  6096    6096\r\n2198    307708  307688  6096    6096\r\n<\/code><\/pre>\n<h4>\u83b7\u53d6\u5171\u4eab\u5185\u5b58.sh<\/h4>\n<pre class=\"post-pre\"><code><span class=\"nb\">cat<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"no\">_EOF_<\/span><span class=\"sh\"> &gt; getshmem.sh\r\n#!\/bin\/sh\r\n\r\n# <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">1 process name\r\nif [ <\/span><span class=\"se\">\\$<\/span><span class=\"sh\"># -ne 1 ]; then\r\n  exit\r\nfi\r\n\r\n# print header\r\nprintf \"PID<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">RSS<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">SHARED<\/span><span class=\"se\">\\n<\/span><span class=\"sh\">\"\r\n\r\n# get shared memory size\r\npid=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">pgrep <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">1<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n\r\nfor p in <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid\r\ndo\r\n  if [ -f \/proc\/<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">p\/smaps ]; then\r\n    vm=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">grep -e '^Rss:<\/span><span class=\"se\">\\|<\/span><span class=\"sh\">^Shared_Clean:<\/span><span class=\"se\">\\|<\/span><span class=\"sh\">^Shared_Dirty:' \/proc\/<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">p\/smaps |\r\n    awk '\r\n      BEGIN {\r\n        rss = 0;\r\n        clean = 0;\r\n        dirty = 0;\r\n      }\r\n      {\r\n        if(<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">1 == \"Rss:\") {\r\n          rss += <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">2;\r\n        }\r\n        else if(<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">1 == \"Shared_Clean:\") {\r\n          clean += <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">2;\r\n        }\r\n        else if(<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">1 == \"Shared_Dirty:\") {\r\n          dirty += <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">2;\r\n        }\r\n      }\r\n      END {\r\n        per = (rss == 0) ? 0 : (clean+dirty)*100\/rss;\r\n        printf(\"%d<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d<\/span><span class=\"se\">\\n<\/span><span class=\"sh\">\", rss, clean+dirty, per);\r\n      }\r\n    '<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n\r\n    printf \"%d<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d (%d%%)<\/span><span class=\"se\">\\n<\/span><span class=\"sh\">\" <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">p <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">vm\r\n  fi\r\ndone\r\n<\/span><span class=\"no\">_EOF_\r\n<\/span><\/code><\/pre>\n<pre class=\"post-pre\"><code>sh getshmem.sh httpd\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>PID     RSS     SHARED\r\n2193    11832   8368 <span class=\"o\">(<\/span>70%<span class=\"o\">)<\/span>\r\n2194    6208    6012 <span class=\"o\">(<\/span>96%<span class=\"o\">)<\/span>\r\n2195    6208    6016 <span class=\"o\">(<\/span>96%<span class=\"o\">)<\/span>\r\n2196    6208    6016 <span class=\"o\">(<\/span>96%<span class=\"o\">)<\/span>\r\n2197    6208    6016 <span class=\"o\">(<\/span>96%<span class=\"o\">)<\/span>\r\n2198    6208    6016 <span class=\"o\">(<\/span>96%<span class=\"o\">)<\/span>\r\n<\/code><\/pre>\n<h2>smaps.sh \u6587\u4ef6<\/h2>\n<p>\u4ee5\u4e0b\u662f\u540c\u6837\u610f\u601d\u7684\u4e2d\u6587\u8868\u8fbe\uff1a<br \/>\nholly\u7684\u535a\u5ba2\uff1a2010\u5e749\u670823\u65e5\u7684\u6280\u672f\u65b9\u6848<br \/>\n\u8fd9\u662fShell\u811a\u672c\u7248\u672c\uff0c\u4e0d\u9700\u8981Perl\u6216Linux::Smaps\u3002<br \/>\n\u5355\u4f4d\u91c7\u7528KB\uff0c\u589e\u52a0\u4e86VSZ\uff08\u865a\u62df\u5185\u5b58\u5927\u5c0f\uff09\u4f5c\u4e3a\u9879\u76ee\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">cat<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"no\">_EOF_<\/span><span class=\"sh\"> &gt; smaps.sh\r\n#!\/bin\/sh\r\n\r\necho -e \"PID<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">VSZ<\/span><span class=\"se\">\\t\\t<\/span><span class=\"sh\">RSS<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">Shared\"\r\nfor pid in <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">@; do\r\n    smaps=\"\/proc\/<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid\/smaps\"\r\n    vsz=<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">(grep -E \"^Size\" <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">smaps | awk 'BEGIN{ num = 0 } { num += <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">2 } END{ print num }')\r\n    rss=<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">(grep -E \"^Rss\" <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">smaps | awk 'BEGIN{ num = 0 } { num += <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">2 } END{ print num }')\r\n    shared=<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">(grep -E \"^Shared\" <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">smaps | awk 'BEGIN{ num = 0 } { num += <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">2 } END{ print num }')\r\n    percent=<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">(echo \"scale=2; (<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">shared \/ <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">rss) * 100\" | bc | cut -d \".\" -f 1)\r\n    echo -e \"<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid<\/span><span class=\"se\">\\t\\$<\/span><span class=\"sh\">{vsz}KB<\/span><span class=\"se\">\\t\\$<\/span><span class=\"sh\">{rss}KB<\/span><span class=\"se\">\\t\\$<\/span><span class=\"sh\">{shared}KB(<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">{percent}%)\"\r\ndone\r\n<\/span><span class=\"no\">_EOF_\r\n<\/span><\/code><\/pre>\n<pre class=\"post-pre\"><code>sh smaps.sh <span class=\"sb\">`<\/span>pgrep httpd<span class=\"sb\">`<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>PID     VSZ             RSS     Shared\r\n4847    232840KB        8272KB  6180KB<span class=\"o\">(<\/span>74%<span class=\"o\">)<\/span>\r\n4876    232840KB        5544KB  5292KB<span class=\"o\">(<\/span>95%<span class=\"o\">)<\/span>\r\n4935    232840KB        5544KB  5292KB<span class=\"o\">(<\/span>95%<span class=\"o\">)<\/span>\r\n4976    232840KB        5544KB  5292KB<span class=\"o\">(<\/span>95%<span class=\"o\">)<\/span>\r\n4999    232840KB        5544KB  5292KB<span class=\"o\">(<\/span>95%<span class=\"o\">)<\/span>\r\n<\/code><\/pre>\n<h2>\u6ca1\u6709\u5171\u4eab\u5185\u5b58\u7684\u6570\u636e\u83b7\u53d6\u5668.pl<\/h2>\n<p>\u4e0e\u5176\u8ba1\u7b97\u548c\u8f93\u51faVSZ\uff0c\u800c\u662f\u8ba1\u7b97\u548c\u8f93\u51faNONE_SHARED\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nb\">cat<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"no\">_EOF_<\/span><span class=\"sh\"> &gt; none_shared_memory_fetcher.pl\r\n#!\/usr\/bin\/env perl\r\nuse strict;\r\nuse warnings;\r\n\r\n@ARGV or die \"usage: %0 [pid ...]\";\r\n\r\nprintf \"PID<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">RSS<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">SHARED<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">NONE_SHARED<\/span><span class=\"se\">\\n<\/span><span class=\"sh\">\";\r\n\r\nfor my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid (@ARGV) {\r\n    open my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">fh, \"&lt; \/proc\/<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid\/smaps\" or (warn <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">! and next);\r\n    my @rows = &lt;<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">fh&gt;;\r\n    my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">rss    = mem_size_fetcher('Rss',@rows) or next;\r\n    my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">shared = mem_size_fetcher('Shared_Clean',@rows) + mem_size_fetcher('Shared_Dirty',@rows);\r\n    printf\r\n        \"%d<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d (%d%%)<\/span><span class=\"se\">\\t<\/span><span class=\"sh\">%d<\/span><span class=\"se\">\\n<\/span><span class=\"sh\">\",\r\n        <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">pid,\r\n        <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">rss,\r\n        <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">shared,\r\n        int((<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">shared \/ <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">rss) * 100),\r\n        (<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">rss - <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">shared),\r\n}\r\n\r\nsub mem_size_fetcher {\r\n    my (<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">target,@rows) = @_;\r\n    my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">mem_size = 0;\r\n    for my <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">row (@rows) {\r\n        my (<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">mem) = <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">row =~ \/^<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">target:<\/span><span class=\"se\">\\s<\/span><span class=\"sh\">*(<\/span><span class=\"se\">\\d<\/span><span class=\"sh\">+)\/i;\r\n        <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">mem_size +=(<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">mem||0);\r\n    }\r\n    return <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">mem_size;\r\n}\r\n<\/span><span class=\"no\">_EOF_\r\n<\/span><\/code><\/pre>\n<pre class=\"post-pre\"><code>perl none_shared_memory_fetcher.pl <span class=\"sb\">`<\/span>pgrep httpd<span class=\"sb\">`<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>PID     RSS     SHARED          NONE_SHARED\r\n12538   3780    3072 <span class=\"o\">(<\/span>81%<span class=\"o\">)<\/span>      708\r\n12540   3048    2836 <span class=\"o\">(<\/span>93%<span class=\"o\">)<\/span>      212\r\n12541   3060    2840 <span class=\"o\">(<\/span>92%<span class=\"o\">)<\/span>      220\r\n12542   3152    2908 <span class=\"o\">(<\/span>92%<span class=\"o\">)<\/span>      244\r\n12543   3060    2840 <span class=\"o\">(<\/span>92%<span class=\"o\">)<\/span>      220\r\n12544   3048    2836 <span class=\"o\">(<\/span>93%<span class=\"o\">)<\/span>      212\r\n12545   3060    2840 <span class=\"o\">(<\/span>92%<span class=\"o\">)<\/span>      220\r\n12546   3060    2840 <span class=\"o\">(<\/span>92%<span class=\"o\">)<\/span>      220\r\n12547   3060    2840 <span class=\"o\">(<\/span>92%<span class=\"o\">)<\/span>      220\r\n<\/code><\/pre>\n<h1>\u81ea\u52a8\u8ba1\u7b97<\/h1>\n<h2>\u83b7\u53d6\u6700\u5927\u5ba2\u6237\u7aef.php<\/h2>\n<p>\u6211\u521b\u5efa\u4e86\u4e00\u4e2a\u7528\u4e8e\u8ba1\u7b97Apache\u7684MaxClient\u7684\u811a\u672c &#8211; \u7f51\u7edc\u8bdd\u9898<\/p>\n<pre class=\"post-pre\"><code>curl <span class=\"nt\">-sL<\/span> https:\/\/raw.githubusercontent.com\/ryoppy\/Get-MaxClients.\/master\/get_max_client.php | php\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nt\">--------------------------------<\/span>\r\nmemorySize \/ <span class=\"o\">(<\/span>rssAverage - shrAverage<span class=\"o\">)<\/span> <span class=\"o\">=<\/span> 1020076KB \/ <span class=\"o\">(<\/span>5673KB - 5364KB<span class=\"o\">)<\/span> <span class=\"o\">=<\/span> 3301\r\nMaxClient maximum value is 3301.\r\n<span class=\"nt\">--------------------------------<\/span>\r\n<\/code><\/pre>\n<h3>\u80af\u5409\u7684\u53c9\u5b50<\/h3>\n<pre class=\"post-pre\"><code>curl <span class=\"nt\">-sL<\/span> https:\/\/raw.githubusercontent.com\/kenjis\/Get-MaxClients.\/my_change\/get_max_client.php | php\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nt\">--------------------------------<\/span>\r\nrssAverage - shrAverage <span class=\"o\">=<\/span> <span class=\"o\">(<\/span>5673KB - 5364KB<span class=\"o\">)<\/span> <span class=\"o\">=<\/span> 309KB\r\nmemorySize \/ <span class=\"o\">(<\/span>rssAverage - shrAverage<span class=\"o\">)<\/span> <span class=\"o\">=<\/span> 1020076KB \/ 309KB <span class=\"o\">=<\/span> 3301\r\nMaxClient maximum value is 3301.\r\n<span class=\"nt\">--------------------------------<\/span>\r\n<\/code><\/pre>\n<h2>\u83b7\u53d6\u6700\u5927\u5ba2\u6237\u7aef.sh<\/h2>\n<p>Apache\u8c03\u4f18\uff1a\u8ba1\u7b97\u53ef\u4ee5\u8bbe\u7f6e\u7684MaxClients\u4e0a\u9650\u503c &#8211; (DxD)\u221e<br \/>\nget_max_client.php\u7684Shell\u811a\u672c\u7248\u672c\u3002\u5173\u4e8e$_MIN_MAX_CLIENTS\u8bf7\u53c2\u8003\u4ee5\u4e0b\u5185\u5bb9\u3002<\/p>\n<blockquote><p>\u8be5\u8ba1\u7b97\u662f\u6839\u636e\u53ef\u7528\u5185\u5b58\u91cf\u6765\u786e\u5b9aMaxClients\u3002\u7136\u800c\uff0c\u5b83\u5e76\u6ca1\u6709\u8003\u8651\u5df2\u542f\u52a8\u7684Apache\u8fdb\u7a0b\u6240\u4f7f\u7528\u7684\u5185\u5b58\u91cf\uff0c\u56e0\u6b64\u662f\u4e0d\u5b8c\u6574\u7684\u3002<\/p><\/blockquote>\n<pre class=\"post-pre\"><code><span class=\"nb\">cat<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"no\">_EOF_<\/span><span class=\"sh\"> &gt; get_max_clients.sh\r\n#!\/bin\/bash\r\n\r\n_PIDS=(<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">pgrep httpd<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">)\r\n_PROC_COUNT=<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">{#_PIDS[@]}\r\n\r\n_MEMORY_TOTAL=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">free | grep Mem | awk '{print <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">2;};'<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n_MEMORY_FREE=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">vmstat -a | awk 'NR==3{print <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">4+<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">5;};'<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n_RSS_TOTAL=0\r\n_SHARED_TOTAL=0\r\n\r\nfor _PID in <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">{_PIDS[@]}; do\r\n    _SMAPS=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">cat \/proc\/<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_PID\/smaps<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n    _RSS=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">echo \"<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_SMAPS\" | grep Rss | awk '{value += <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">2} END {print value;};'<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n    _SHARED=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">echo \"<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_SMAPS\" | grep Shared | awk '{value += <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">2} END {print value;};'<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n    _RSS_TOTAL=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">expr <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_RSS_TOTAL + <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_RSS<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n    _SHARED_TOTAL=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">expr <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_SHARED_TOTAL + <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_SHARED<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\ndone\r\n\r\n_RSS_AVERAGE=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">expr <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_RSS_TOTAL \/ <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_PROC_COUNT<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n_SHARED_AVERAGE=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">expr <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_SHARED_TOTAL \/ <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_PROC_COUNT<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n_PROC_MEMORY=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">expr <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_RSS_AVERAGE - <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_SHARED_AVERAGE<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n_MIN_MAX_CLIENTS=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">expr <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_MEMORY_FREE \/ <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_PROC_MEMORY<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n_MAX_MAX_CLIENTS=<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">expr <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_MEMORY_TOTAL \/ <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_PROC_MEMORY<\/span><span class=\"se\">\\`<\/span><span class=\"sh\">\r\n\r\necho \"Memory Total \/ (Rss Average - Shr Average) = <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_MEMORY_TOTAL \/ (<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_RSS_AVERAGE - <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_SHARED_AVERAGE)\"\r\necho \"Memory Free  \/ (Rss Average - Shr Average) = <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_MEMORY_FREE \/ (<\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_RSS_AVERAGE - <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_SHARED_AVERAGE)\"\r\necho \"MaxClients = <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_MIN_MAX_CLIENTS ~ <\/span><span class=\"se\">\\$<\/span><span class=\"sh\">_MAX_MAX_CLIENTS\"\r\n\r\nexit 0\r\n<\/span><span class=\"no\">_EOF_\r\n<\/span><\/code><\/pre>\n<pre class=\"post-pre\"><code>sh get_max_clients.sh\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>Memory Total \/ <span class=\"o\">(<\/span>Rss Average - Shr Average<span class=\"o\">)<\/span> <span class=\"o\">=<\/span> 1020076 \/ <span class=\"o\">(<\/span>3626 - 3263<span class=\"o\">)<\/span>\r\nMemory Free  \/ <span class=\"o\">(<\/span>Rss Average - Shr Average<span class=\"o\">)<\/span> <span class=\"o\">=<\/span> 635560 \/ <span class=\"o\">(<\/span>3626 - 3263<span class=\"o\">)<\/span>\r\nMaxClients <span class=\"o\">=<\/span> 1750 ~ 2810\r\n<\/code><\/pre>\n<h1>Apache \u76f8\u5173\u4fe1\u606f<\/h1>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Apache\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8a2d\u5b9a<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Apache HTTP Server \u306e\u30b5\u30dd\u30fc\u30c8\u671f\u9650<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Apache \u306e\u30ed\u30b0\u3092\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3067\u96c6\u8a08\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Apache \u306e\u60c5\u5831\u3092\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u3067\u53d6\u5f97\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">IP\u30a2\u30c9\u30ec\u30b9\u304b\u3089\u56fd\u3084\u90fd\u5e02\u3092\u5224\u5225\u3059\u308b (GeoIP)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Apache \u30c1\u30e5\u30fc\u30cb\u30f3\u30b0 \u30b9\u30af\u30ea\u30d7\u30c8<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Apache \u306e MaxClients \u306e\u9069\u6b63\u5024<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u81ea\u52a8\u8ba1\u7b97 Apache \u7684 MaxClients \u914d\u7f6e\u503c\u3002 MySQLTuner \u662f\u4e00\u4e2a\u8457\u540d\u7684\u811a\u672c\uff0c\u7528\u4e8e\u652f\u6301  [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-37108","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Apache \u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/apache-\u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Apache \u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09\" \/>\n<meta property=\"og:description\" content=\"\u81ea\u52a8\u8ba1\u7b97 Apache \u7684 MaxClients \u914d\u7f6e\u503c\u3002 MySQLTuner \u662f\u4e00\u4e2a\u8457\u540d\u7684\u811a\u672c\uff0c\u7528\u4e8e\u652f\u6301 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/apache-\u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-25T14:17:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T23:34:25+00:00\" \/>\n<meta name=\"author\" content=\"\u97f5, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u97f5, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/\",\"name\":\"Apache \u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2024-02-25T14:17:00+00:00\",\"dateModified\":\"2024-04-29T23:34:25+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Apache \u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e\",\"name\":\"\u97f5, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g\",\"caption\":\"\u97f5, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Apache \u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/apache-\u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09\/","og_locale":"zh_CN","og_type":"article","og_title":"Apache \u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09","og_description":"\u81ea\u52a8\u8ba1\u7b97 Apache \u7684 MaxClients \u914d\u7f6e\u503c\u3002 MySQLTuner \u662f\u4e00\u4e2a\u8457\u540d\u7684\u811a\u672c\uff0c\u7528\u4e8e\u652f\u6301 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/apache-\u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2024-02-25T14:17:00+00:00","article_modified_time":"2024-04-29T23:34:25+00:00","author":"\u97f5, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u97f5, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"8 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/","name":"Apache \u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2024-02-25T14:17:00+00:00","dateModified":"2024-04-29T23:34:25+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"Apache \u8c03\u4f18\u811a\u672c\uff08\u81ea\u52a8\u8ba1\u7b97\u6700\u5927\u5ba2\u6237\u7aef\u6570\uff09"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/6530331a63adef3b3443a1fab53a0e6e","name":"\u97f5, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/429ccb39b3fff5188bc17986222cfb0936cbadb8cc933cff04ab5ca01bd30a08?s=96&d=mm&r=g","caption":"\u97f5, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yunke\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/apache-%e8%b0%83%e4%bc%98%e8%84%9a%e6%9c%ac%ef%bc%88%e8%87%aa%e5%8a%a8%e8%ae%a1%e7%ae%97%e6%9c%80%e5%a4%a7%e5%ae%a2%e6%88%b7%e7%ab%af%e6%95%b0%ef%bc%89\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/37108","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=37108"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/37108\/revisions"}],"predecessor-version":[{"id":90562,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/37108\/revisions\/90562"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=37108"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=37108"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=37108"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}