简单配置优化LAMP

由于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-networking

key_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?