我刚刚购买了第一个 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(如果您不需要它)