Apache 配置性能调优

Apache 配置性能调优

我刚刚购买了第一个 VPS,内存为 2GB。我安装了 Apache + mySQL 和 1 个主要静态站点和 2 个 wordpress 站点(用于测试)。起初,我的内存峰值为 1GB,这表明它需要进一步配置。

Here is the result for running ps -ylC httpd --sort:rss
S   UID   PID  PPID  C PRI  NI   RSS    SZ WCHAN  TTY          TIME CMD
S     0 20729     1  0  80   0 10032 69902 poll_s ?        00:00:00 httpd
S    48 20770 20729  0  80   0 22768 73372 inet_c ?        00:00:00 httpd
S    48 20735 20729  0  80   0 24020 73897 inet_c ?        00:00:00 httpd
S    48 20740 20729  0  80   0 26524 74302 inet_c ?        00:00:00 httpd
S    48 20733 20729  0  80   0 27792 74831 inet_c ?        00:00:00 httpd

这是使用命令 top 的结果

top - 15:42:01 up 18 days, 15:45,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:  26 total,   1 running,  24 sleeping,   0 stopped,   1 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2097152k total,   837604k used,  1259548k free,        0k buffers
Swap:  4194304k total,    15836k used,  4178468k free,   679184k cached
    1 root      20   0 19208  416  292 S  0.0  0.0   0:00.01 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd/179
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.00 khelper/179
  491 root      20   0 80300  776  468 S  0.0  0.0   0:18.75 sendmail
  540 smmsp     20   0 76024  388  260 S  0.0  0.0   0:00.08 sendmail
  556 root      20   0  114m  368  284 S  0.0  0.0   0:02.47 crond
  726 root      16  -4 10660    8    4 S  0.0  0.0   0:00.00 udevd
  876 root      20   0 64272    8    4 S  0.0  0.0   0:00.00 saslauthd
  877 root      20   0 64272    8    4 S  0.0  0.0   0:00.00 saslauthd
  908 root      20   0  181m  864  416 S  0.0  0.0   0:00.04 rsyslogd
  928 root      20   0 22092    8    4 S  0.0  0.0   0:00.00 xinetd
 2100 root      20   0  105m 1180 1176 S  0.0  0.1   0:00.00 mysqld_safe
 2189 mysql     20   0  679m  19m 3888 S  0.0  0.9   0:41.22 mysqld
18759 root      20   0 94084 4772 3420 S  0.0  0.2   0:01.03 sshd
18761 root      20   0  105m 1952 1488 S  0.0  0.1   0:00.16 bash
20729 root      20   0  273m 9.8m 5124 S  0.0  0.5   0:00.04 httpd
20733 apache    20   0  292m  27m 4804 S  0.0  1.3   0:00.54 httpd

以下是我在 httpd.conf 中所做的更改

# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On

#
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 15

#
# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 5

这是我的 prefork-MPM 设置

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# ServerLimit: maximum value for MaxClients for the lifetime of the server
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers       2
MinSpareServers    3
MaxSpareServers    3
ServerLimit      35
MaxClients       35

我最初只想在这里安装 MongoDB。但我还计划将我的 WP 安装从共享主机中移出。总而言之,我将在 fuelphp 上运行 MongoDB,拥有 2-5 个 wp 网站、1 个 CodeIgniter Web 应用程序(无 DB)、2 个未来 Web 应用程序。

如果可能的话,我喜欢将内存保持在最大 1.2GB。对 apache 方面进一步调整有什么建议吗?我会看看是否可以减少 mysql 占用空间。

答案1

“如何让我的网站运行得更快”这个问题实在太复杂了,无法在这个论坛上回答。不过有几点值得注意:

  • 是的,内存使用率非常高,即使对于 Wordpress 也是如此
  • 谁在乎?除非你知道它会影响性能,否则为什么要担心它呢?
  • 将 minSpareServers 设置为与 maxSpareServers 相同的值并不是应对不断变化的需求配置文件的好方法 - Apache 限制启动新服务器的速度,我建议将 maxSpareServers 更改为 5
  • KeepAliveTimeout 5 - 您更改了它吗?这通常仍是默认值 - 除非您知道您在移动连接上执行大量 Ajax / COMET 操作,否则默认值太高了 - 建议 2
  • 考虑添加反向代理,例如 nginx 或 varnish
  • 使用 ESI 或 W3 总缓存插件来安装您的 Wordpress(ESI 需要支持 ESI 的反向代理,例如 Varnish 或 ATS)
  • 您没有提供 MySQL 配置的详细信息。如果您使用的是 innodb,则缓冲池的大小应足以使用大量内存(即,您应该努力减少系统上的可用内存量)。如果是 MyISAM,则需要为 VFS 保留大量可用内存
  • 你应该从删除 Apache 中不需要的东西开始任何内存调整练习
  • 你没有说明如何配置/调用 PHP。理想情况下,它应该是 mod_php 和操作码缓存
  • 我不建议切换到其他网络服务器,除非你有一个很多流量超过 35 个并发连接

答案2

经过一些测试后,我刚刚切换到 Nginx。现在性能好多了(Amazon EC2 微型实例,613MB + 在 Java 上运行多层)。

如果你想保留 Apache,我建议你投资一本关于性能的好书,例如这个

答案3

1. 提高 MaxKeepAliveRequests。MaxKeepAliveRequests 数量过低会导致 apache2 子进程每次达到 MaxKeepAliveRequests 时重新启动。

第二,禁用未使用的 apache 模块,例如 ldap auth(如果您不需要它)

相关内容