![如何在我的服务器上最大化 Apache 性能 - 需要计算请](https://linux22.com/image/605930/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%88%91%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E6%9C%80%E5%A4%A7%E5%8C%96%20Apache%20%E6%80%A7%E8%83%BD%20-%20%E9%9C%80%E8%A6%81%E8%AE%A1%E7%AE%97%E8%AF%B7.png)
我有一台 Sun T5140 服务器,配备 8GB 内存和两个 4 核 T 系列 CPU(最多 128 个线程)。此服务器是专用的 Web 服务器。基于我愿意将服务器物理内存的 1/2 分配给 Apache(4GB)的前提,我该如何计算以下 Apache 设置以充分利用这 4GB 内存?我在网上找不到明确的计算方法。PS,我在 Solaris 10 OS 上使用 Apache 2.2.22。
StartServers ??
MinSpareServers ??
MaxSpareServers ??
ServerLimit ??
MaxClients ??
MaxRequestsPerChild ??
(XXXXXXXXXXXX)-root> ps -elf | head -n 1 ; ps -elf | grep http
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
0 S webuser 29751 12656 0 40 20 ? 25288 ? 10:53:17 ? 0:03 /usr/local/apache2/bin/httpd -k sta
0 S webuser 420 12656 0 45 20 ? 24136 ? 10:53:22 ? 0:02 /usr/local/apache2/bin/httpd -k sta
0 S webuser 18563 12656 0 40 20 ? 27952 ? 10:51:51 ? 0:12 /usr/local/apache2/bin/httpd -k sta
0 S webuser 18837 12656 0 40 20 ? 24160 ? 10:51:53 ? 0:08 /usr/local/apache2/bin/httpd -k sta
0 S webuser 2357 12656 0 48 20 ? 22976 ? 10:53:37 ? 0:01 /usr/local/apache2/bin/httpd -k sta
0 S webuser 18838 12656 0 40 20 ? 24176 ? 10:51:53 ? 0:06 /usr/local/apache2/bin/httpd -k sta
0 S webuser 29750 12656 0 40 20 ? 23016 ? 10:53:17 ? 0:02 /usr/local/apache2/bin/httpd -k sta
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
9555 webuser 243M 142M sleep 50 0 0:00:44 1.0% httpd/1
19131 webuser 229M 118M cpu102 30 0 0:00:20 0.9% httpd/1
9538 webuser 232M 130M cpu74 0 0 0:00:46 0.8% httpd/1
9550 webuser 230M 128M cpu24 39 0 0:00:55 0.6% httpd/1
9534 webuser 232M 130M cpu69 0 0 0:00:34 0.6% httpd/1
9556 webuser 245M 142M cpu2 24 0 0:00:47 0.6% httpd/1
2259 webuser 232M 122M cpu87 9 0 0:01:08 0.5% httpd/1
19038 webuser 229M 118M sleep 59 0 0:00:16 0.5% httpd/1
2149 webuser 232M 121M sleep 59 0 0:01:13 0.5% httpd/1
19036 webuser 232M 120M sleep 59 0 0:00:16 0.5% httpd/1
9526 webuser 230M 118M sleep 59 0 0:00:34 0.5% httpd/1
19034 webuser 208M 97M cpu22 0 0 0:00:09 0.4% httpd/1
9563 webuser 232M 129M sleep 59 0 0:00:26 0.4% httpd/1
4101 webuser 234M 132M sleep 39 0 0:01:04 0.4% httpd/1
15735 webuser 232M 120M sleep 39 0 0:00:28 0.4% httpd/1
2042 webuser 232M 122M sleep 59 0 0:00:49 0.3% httpd/1
26119 webuser 232M 131M cpu99 9 0 0:01:42 0.3% httpd/1
19035 webuser 229M 117M sleep 39 0 0:00:12 0.3% httpd/1
19134 webuser 229M 116M sleep 39 0 0:00:09 0.2% httpd/1
9553 webuser 229M 126M sleep 39 0 0:00:40 0.2% httpd/1
18942 webuser 229M 117M sleep 39 0 0:00:07 0.2% httpd/1
9308 webuser 230M 127M sleep 49 0 0:00:32 0.2% httpd/1
9564 webuser 246M 133M sleep 59 0 0:00:33 0.2% httpd/1
7154 webuser 229M 127M sleep 59 0 0:00:29 0.2% httpd/1
19040 webuser 229M 116M sleep 59 0 0:00:08 0.2% httpd/1
1275 root 3368K 2608K cpu13 0 0 0:25:42 0.2% http_services.s/1
9531 webuser 232M 129M sleep 49 0 0:00:19 0.2% httpd/1
19146 webuser 198M 85M cpu5 39 0 0:00:03 0.2% httpd/1
19135 webuser 203M 91M sleep 49 0 0:00:05 0.1% httpd/1
9545 webuser 232M 128M sleep 59 0 0:00:21 0.1% httpd/1
9543 webuser 230M 117M sleep 59 0 0:00:13 0.1% httpd/1
9301 webuser 229M 128M sleep 59 0 0:00:16 0.1% httpd/1
6685 tomcat 615M 289M sleep 59 0 0:10:55 0.1% jsvc/58
9410 webuser 232M 121M sleep 59 0 0:00:16 0.0% httpd/1
17811 webuser 156M 11M sleep 39 0 0:00:00 0.0% httpd/1
Total: 98 processes, 338 lwps, load averages: 14.38, 12.06, 8.03
详细说明每个过程正在做什么-例如这个:
20225 webuser 189M 89M sleep 59 0 0:00:38 0.2% httpd/1
这里使用 pmap 命令显示:
(XXXXXXXXX-01)-root> pmap -x 20225
20225: /usr/local/apache2/bin/httpd -k start
20225: /usr/local/apache2/bin/httpd -k start
20225: /usr/local/apache2/bin/httpd -k start
20225: /usr/local/apache2/bin/httpd -k start
20225: /usr/local/apache2/bin/httpd -k start
Address Kbytes RSS Anon Locked Mode Mapped File
00010000 648 648 - - r-x-- httpd
000C0000 32 32 32 - rwx-- httpd
000C8000 32 32 16 - rwx-- [ heap ]
000D0000 37440 37376 36864 - rwx-- [ heap ]
F5400000 131072 50088 - - rw-s- dev:361,5 ino:45405806
FD630000 64 64 - - rw-s- [ anon ]
FD650000 8 8 - - rw-s- [ anon ]
FD690000 8 8 - - rw-s- dev:256,65544 ino:282776
FD6A0000 8 8 - - r-x-- mod_expires.so
FD6B0000 8 8 - - rwx-- mod_expires.so
FD6C0000 96 96 - - r-x-- xcache.so
FD6E6000 8 8 8 - rwx-- xcache.so
FD6E8000 8 8 8 - rwx-- xcache.so
FD6F0000 64 64 64 - rwx-- [ anon ]
FD710000 64 64 - - rwx-- [ anon ]
FD730000 16 16 - - r-x-- mod_deflate.so
FD742000 16 16 - - rwx-- mod_deflate.so
FD750000 368 352 - - r-x-- mod_jk-1.2.31-httpd-2.2.X.so
FD7BA000 16 16 8 - rwx-- mod_jk-1.2.31-httpd-2.2.X.so
FD7BE000 8 8 8 - rwx-- mod_jk-1.2.31-httpd-2.2.X.so
FD7D0000 8 8 - - r-x-- libavl.so.1
FD7E2000 8 8 - - rwx-- libavl.so.1
FD7F0000 16 16 - - r-x-- libmp.so.2
FD804000 8 8 - - rwx-- libmp.so.2
FD810000 32 32 - - r-x-- libuutil.so.1
FD828000 8 8 8 - rwx-- libuutil.so.1
FD830000 8 8 - - r-x-- libdoor.so.1
FD842000 8 8 - - rwx-- libdoor.so.1
FD850000 96 96 - - r-x-- libscf.so.1
FD878000 8 8 - - rwx-- libscf.so.1
FD880000 8 8 - - rwx-- [ anon ]
FD890000 8 8 - - r-x-- libmd_psr.so.1
FD8A2000 8 8 - - rwx-- libmd_psr.so.1
FD8B0000 192 64 - - r-x-- libfontconfig.so.1.4.4
FD8EE000 16 16 - - rwx-- libfontconfig.so.1.4.4
FD900000 1248 320 - - r-x-- libcrypto.so.0.9.8
FDA46000 96 96 - - rwx-- libcrypto.so.0.9.8
FDA5E000 8 - - - rwx-- libcrypto.so.0.9.8
FDA70000 120 64 - - r-x-- libjpeg.so.62.0.0
FDA9C000 8 8 - - rwx-- libjpeg.so.62.0.0
FDAA0000 264 128 - - r-x-- libssl.so.0.9.8
FDAF2000 24 24 - - rwx-- libssl.so.0.9.8
FDB00000 1288 904 - - r-x-- libxml2.so.2.7.7
FDC50000 56 56 8 - rwx-- libxml2.so.2.7.7
FDC70000 56 48 - - r-x-- libsec.so.1
FDC8E000 16 16 - - rwx-- libsec.so.1
FDC92000 8 - - - rwx-- libsec.so.1
FDCA0000 128 128 - - r-x-- libssh2.so.1.0.1
FDCCE000 16 16 - - rwx-- libssh2.so.1.0.1
FDCE0000 24 24 - - r-x-- libgen.so.1
FDCF6000 8 8 - - rwx-- libgen.so.1
FDD00000 88 72 - - r-x-- libsasl2.so.2.0.21
FDD24000 8 8 - - rwx-- libsasl2.so.2.0.21
FDD30000 192 192 - - r-x-- libidn.so.11.6.2
FDD6E000 16 16 - - rwx-- libidn.so.11.6.2
FDD80000 1296 200 - - r-x-- libX11.so.4
FDED4000 24 24 - - rwx-- libX11.so.4
FDEE0000 8 - - - rw--- libX11.so.4
FDF00000 440 392 - - r-x-- libfreetype.so.6.6.0
FDF7C000 24 24 - - rwx-- libfreetype.so.6.6.0
FDF90000 328 320 - - r-x-- libcurl.so.4.2.0
FDFF0000 24 24 8 - rwx-- libcurl.so.4.2.0
FE000000 8832 8768 - - r-x-- libphp5.so
FE8AE000 376 376 72 - rwx-- libphp5.so
FE90C000 16 8 - - rwx-- libphp5.so
FE910000 64 64 64 - rwx-- libphp5.so
FE920000 8 8 8 - rwx-- libphp5.so
FE930000 248 80 - - r-x-- libjpeg.so.8.0.1
FE97C000 8 8 - - rwx-- libjpeg.so.8.0.1
FE980000 80 80 - - r-x-- libz.so.1.2.5
FE9A2000 8 8 - - rwx-- libz.so.1.2.5
FE9B0000 144 136 - - r-x-- libpng12.so.0.44.0
FE9E2000 8 8 - - rwx-- libpng12.so.0.44.0
FE9F0000 120 112 - - r-x-- libgd.so.2.0.0
FEA1C000 128 24 - - rwx-- libgd.so.2.0.0
FEA3C000 8 - - - rwx-- libgd.so.2.0.0
FEA40000 240 216 - - r-x-- libldap-2.4.so.2.5.6
FEA8A000 16 16 8 - rwx-- libldap-2.4.so.2.5.6
FEA90000 240 240 - - r-x-- libmysqlclient.so.15.0.0
FEADA000 160 160 72 - rwx-- libmysqlclient.so.15.0.0
FEB10000 8 8 - - rw-s- [ anon ]
FEB20000 56 16 - - r-x-- libXpm.so.4.11
FEB3C000 8 8 - - rwx-- libXpm.so.4.11
FEB40000 40 32 - - r-x-- libintl.so.8.0.2
FEB58000 8 8 - - rwx-- libintl.so.8.0.2
FEB60000 8 8 - - rwx-- [ anon ]
FEB70000 40 40 - - r-x-- liblber-2.4.so.2.5.6
FEB88000 8 8 - - rwx-- liblber-2.4.so.2.5.6
FEBA0000 240 240 - - r-x-- libresolv.so.2
FEBE0000 8 8 - - rwx-- [ anon ]
FEBEC000 16 16 - - rwx-- libresolv.so.2
FEC00000 1216 1168 - - r-x-- libc.so.1
FED30000 40 40 32 - rwx-- libc.so.1
FED3A000 8 8 - - rwx-- libc.so.1
FED40000 8 8 - - rw-s- [ anon ]
FED50000 80 80 - - r-x-- libmd.so.1
FED70000 8 8 - - rwx-- [ anon ]
FED74000 8 8 - - rwx-- libmd.so.1
FED80000 584 584 - - r-x-- libnsl.so.1
FEE22000 40 40 16 - rwx-- libnsl.so.1
FEE2C000 24 16 16 - rwx-- libnsl.so.1
FEE40000 64 64 - - rwx-- [ anon ]
FEE60000 32 32 - - r-x-- libaio.so.1
FEE70000 8 8 - - rwx-- [ anon ]
FEE78000 8 8 8 - rwx-- libaio.so.1
FEE80000 40 32 - - r-x-- libgcc_s.so.1
FEE90000 8 8 - - rwx-- [ anon ]
FEE98000 8 8 - - rwx-- libgcc_s.so.1
FEEA0000 48 48 - - r-x-- libsocket.so.1
FEEB0000 8 8 - - rwx-- [ anon ]
FEEBC000 8 8 - - rwx-- libsocket.so.1
FEEC0000 24 24 - - r-x-- librt.so.1
FEED0000 8 8 - - r--s- dev:361,6 ino:57121908
FEED6000 8 8 - - rwx-- librt.so.1
FEEE0000 8 8 - - r-x-- libsendfile.so.1
FEEF2000 8 8 - - rwx-- libsendfile.so.1
FEF00000 912 64 - - r-x-- libiconv.so.2.5.0
FEFF2000 8 8 - - rwx-- libiconv.so.2.5.0
FF000000 144 144 - - r-x-- libapr-1.so.0.4.5
FF032000 16 16 8 - rwx-- libapr-1.so.0.4.5
FF040000 128 64 - - r-x-- libexpat.so.1.5.2
FF06E000 16 16 - - rwx-- libexpat.so.1.5.2
FF080000 608 328 - - r-x-- libm.so.2
FF126000 24 24 - - rwx-- libm.so.2
FF130000 16 16 - - r-x-- libuuid.so.1
FF140000 8 8 - - rwx-- [ anon ]
FF144000 8 8 - - rwx-- libuuid.so.1
FF150000 112 104 - - r-x-- libaprutil-1.so.0.4.1
FF170000 24 16 16 - rwx-- [ anon ]
FF17A000 8 8 8 - rwx-- libaprutil-1.so.0.4.1
FF180000 1432 1352 - - r-x-- libcrypto.so.1.0.0
FF2F0000 8 8 - - rwx-- [ anon ]
FF2F4000 88 88 16 - rwx-- libcrypto.so.1.0.0
FF30A000 8 8 8 - rwx-- libcrypto.so.1.0.0
FF310000 8 8 - - r-x-- libc_psr.so.1
FF320000 8 8 - - r-x-- libdl.so.1
FF32E000 8 8 - - rwxs- [ anon ]
FF332000 8 8 - - rwx-- libdl.so.1
FF340000 296 296 - - r-x-- libssl.so.1.0.0
FF390000 8 8 - - rwx-- [ anon ]
FF398000 24 24 - - rwx-- libssl.so.1.0.0
FF3A0000 16 16 - - r-x-- libpthread.so.1
FF3B0000 208 208 - - r-x-- ld.so.1
FF3F0000 8 8 - - rwx-- [ anon ]
FF3F4000 8 8 8 - rwx-- ld.so.1
FF3F6000 8 8 8 - rwx-- ld.so.1
FFBF0000 64 64 64 - rwx-- [ stack ]
-------- ------- ------- ------- -------
total Kb 193920 108232 37464 -
答案1
根据ps 手册页,SZ 列为:
The size (in pages) of the swappable
process's image in main memory.
您可以使用pagesize 命令获取系统上的默认页面大小,但查看 ps 输出中的 RSS 列会更有帮助。
无论如何,这将让您了解每个 Apache 进程正在使用多少 RAM,但由于共享内存并且取决于您的配置,实际总使用量可能会有很大差异。
了解以下内容会很有帮助:1) Apache 在做什么?2) 如果它是一台专用机器(仅限 Apache),为什么要保留 4GB 的 RAM?
无论如何,您实际上只需要担心 ServerLimit 和 MaxClients。其他设置旨在最大限度地减少 Apache 终止和启动新服务器,这会占用资源。
如果您假设每个进程有 80MB 的 RAM(这很荒谬,但并非不可能 —— 例如,Drupal 站点 + mod_php + 无缓存可能会使用那么多):
StartServers 30
MinSpareServers 10
MaxSpareServers 20
ServerLimit 50
MaxClients 50
MaxRequestsPerChild 1000
尝试一下,使用 top 或 free 观察内存使用情况(忽略缓冲区和缓存),并逐渐增加 MaxClients 和 ServerLimit(保持它们相同)。请记住,这种方法过于保守——MaxClients 的值比可能的安全值要低得多。一旦达到 MaxClients 值,访问者就会看到错误,因此如果网站非常繁忙,请从更高的值开始——您有足够的 RAM 和交换空间。
答案2
答案是“这取决于您要做什么”,这很可能也是您被否决的原因。您没有指定托管的内容类型(静态?动态?php?代理?),您期望的负载类型等。这有点像问在给定 X 个硬盘驱动器和 Y 速度的情况下哪种类型的 RAID 最好,而没有指定服务器正在执行的工作以及您的要求是什么。例如,您已经加载mod_jk
了,jsvc
甚至没有提到这是一台应用服务器,假设它们不是只是坐在那里什么也不做。
您可以收到许多答案,这些答案将详尽地涵盖一种潜在方法和/或 MPM,但除非您将问题集中在特定用例上,否则最终将变成一场非常开放式的讨论,而无法得到“正确”的答案。