由于vps内存较小256MB,以节省资源的角度进行优化配置。
1.优化PHP
编辑php.ini文件:
vim /etc/php.ini
修改脚本占用最大内存数:
memory_limit = 32M
去掉date.timezone前面的”;”并修改:
date.timezone = PRC
打开显示错误信息,方便发现程序错误:
display_errors = On
声明argv和argc变量,建议关掉:
register_argc_argv = Off
自动字符串转义,魔术引号建议关掉:
magic_quotes_gpc = Off
其余的设置用默认的就可以了。
php.ini中的选项作用可参考:http://www.cnblogs.com/mr-jhao/articles/948262.html
2.优化Apache
编辑httpd.conf
vim /etc/httpd/conf/httpd.conf
连接超时改为60秒:
Timeout 60
修改KeepAlive支持HTTP1.1版本一次连接、多次传输功能:
KeepAlive On //这个选项打开后对服务器负载有影响,会导致并发能力下降,考虑到这点也可以关闭,以获得更好的并发数
MaxKeepAliveRequests 100
KeepAliveTimeout 15
安装的Apache默认使用prefork模式,修改以下参数:
<IfModule prefork.c>
StartServers 5
MinSpareServers 5
MaxSpareServers 8
ServerLimit 10
MaxClients 10
MaxRequestsPerChild 1000
</IfModule>
StartServers用来设置httpd启动时启动的子进程副本数量,MinSpareServers设置最少的空余子进程数量,MaxSpareServers设置最多空闲子进程数量,MaxClients设置服务器支持的最多并发数(经测试确认是apache产生的最多进程数 要做限制不要超过内存大小了),ServerLimit和MaxClients有关也要相应修改。简单的说ServerLimit就像是水桶,而MaxClients就像是水,您可以通过更换更大的水桶(将ServerLimit设定为一个较大值)来容纳更多的水(MaxClients),但要注意,MaxClients的设定数值是不能大于ServerLimit的设定数值的!MaxRequestsPerChild规定子进程副本处理过一定次数的请求之后,就可以让这个子进程副本退出,再从原始的httpd进程中重新复制一个干净的副本,这样就能提高系统的稳定性。
查找修改,以支持伪静态:
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
查找以下并修改:
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be “All”, “None”, or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
查找“Options Indexes FollowSymLinks”,并将其注释掉,禁止Apache列目录功能。
修改好后重启Apache使设置生效。
3.优化MySQL
编辑my.cnf
vim /etc/my.cnf
在[mysqld]栏的最后加上优化命令:
skip-bdb
skip-innodb
skip-external-locking
skip-name-resolve
skip-networkingkey_buffer_size = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
简单说明:
skip-bdb //bdb是BerkeleyDB,MySQL5.1之后默认不支持了。
skip-innodb //忽略innodb存储引擎
skip-external-locking //避免MySQL的外部锁定,减少出错几率增强稳定性。
skip-name-resolve //禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。
skip-networking //禁止MySQL监听网络端口
key_buffer_size = 16M //key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。
max_allowed_packet = 1M
table_cache = 64 //同时打开的数据表的数量(默认设置是64)。
sort_buffer_size = 512K //查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占!
net_buffer_length = 8K
read_buffer_size = 256K //读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!
read_rnd_buffer_size = 512K //类似于read_buffer_size选项,但针对的是按某种特定顺序(比如使用了ORDER BY子句的查询)输出的查询结果(默认设置是256K)。
myisam_sort_buffer_size = 8M
设置好后重启MySQL使设置生效。
由于对MySQL不是很了解,优化配置选择了网上流行的设置,看看效果怎么样。==!
试了下效果没想象中的那么好,内存占用率还是很高啊,有木有!!!唉~失败是成功之母,还有什么方法呢?观察内存占用情况,mysqld占用2%左右内存,5M多。7个httpd进程各占了10%左右内存,3个空闲。。。总共使用的内存是mysql的5M+httpd的7*25M+系统本身需要的约50M=230M,看来要512MB内存的vps跑LAMP?