忆未来 http://glyun.com
128M内存VPS LNMP安装优化小记
这一次域名迁移的同时,我更换了服务器,由原先的虚拟空间迁移到独立 VPS。现在使用的 VPS 是 PhotonVPS 。
月付5.95美元,使用优惠码 TENOFF
或 PHOTONLEB
可以打7折,换算汇率之后是26人民币每月。
这款VPS的内存只有128,我们就要精打细算考虑如何省内存。经过我几天琢磨,我终于配置的可用率比较高,使用 siege -c 100 -t 100
时候可以保持 100% 可用率。(其实做不到这么高的并发,大概10个并发每秒)下面就是我记录的安装配置过程。
安装 LNMP
Linux 发行版选用
CentOS 据说有较好的安全性和性能,我个人更喜欢 Arch。查询了相关资料,在生产环境使用 Arch 的似乎不多。
CentOS 里面的包比较旧,不像 Arch 里面,滚动最新。所以这里需要用到的LNMP大部分都需要自行编译。
Nginx 安装
Nginx 的性能在小内存低配置的服务器上跑得比 Apache 要好。这是我们为什么选用 Nginx。
目前 Nginx 的最新稳定版是1.0.9版。CentOS 官方源里面搜索不到 Nginx,需要自行编译。
准备编译环境,需要安装一堆工具,使用下面这个命令 yum 安装。
1
|
yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers |
下载Nginx
1
2
|
cd /tmp wget http://nginx.org/download/nginx-1.0.9.tar.gz |
因为我们需要安装使用https,所以需要SSL模块支持,我们需要OpenSSL源码。
1
2
|
wget http://openssl.org/source/openssl-1.0.0c.tar.gz tar zxvf openssl-1.0.0c.tar.gz |
编译Nginx,使用www作为用户和用户组,同时加入http ssl模块支持。
1
2
3
|
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_ssl_module --with-openssl=/tmp/openssl-1.0.0c/ make make install |
这样nginx就安装完了,执行 /usr/local/ngxin/bin/nginx -V
可以查看nginx信息。
nginx: nginx version: nginx/1.0.9 nginx: built by gcc 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC) nginx: TLS SNI support enabled nginx: configure arguments: –user=www –group=www –prefix=/usr/local/nginx –with-http_ssl_module –with-openssl=/tmp/openssl-1.0.0c/
为nginx 创建软链接
1
|
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx |
ngxin 启动关闭
1
2
3
|
nginx #启动 nginx -s stop #关闭 nginx -s reload #重启 |
运行 nginx
就可以启动服务器了,在浏览器输入服务器ip, 能够看见 nginx
的字样。
MySQL安装
MySQL我没有自行编译,使用CentOS官方源里面的Mysql。
1
|
yum install -y mysql-server |
PHP安装
PHP需要自行编译,原因是Nginx使用Fast-CGI调用PHP服务。我们需要php-cgi常驻后台。在PHP 5.3.3之后,一个名为php-fpm的小东西被php核心加入。这个php-fpm可以常驻后台响应Fast-CGI请求。
悲剧的是,截至目前位置,CentOS官方源里面PHP版本是5.3.2,好死不死的差一个小数点。只能自行编译了。
安装libmcrypt,这是某个依赖包,另外phpmyadmin也需要这个模块。
1
2
3
4
|
wget http://pkgs.repoforge.org/libmcrypt/libmcrypt-2.5.71.2.el6.rf.i686.rpm ls rpm -i libmcrypt-2.5.7-1.2.el6.rf.i686.rpm rpm -i --force libmcrypt-2.5.7-1.2.el6.rf.i686.rpm |
安装php 5.3.8
1
2
3
4
|
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/bin/ --with-mysqli=/usr/bin/mysql_config --with-iconv-dir=/usr/local/libiconv --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --with-curl --with-curlwrappers --with-mhash --with-mcrypt --with-gd --enable-gd-native-ttf --with-xsl --with-openssl --with-ldap --with-ldap-sasl --with-xmlrpc --without-pear --enable-zip --enable-soap --enable-mbstring --enable-ftp --enable-sockets --enable-pcntl --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --disable-rpath --enable-mbregex --enable-safe-mode --enable-fpm --with-fpm-user=www --with-fpm-group=www make make test make install |
运行LAMP
现在环境已经安装好了,我们稍作配置,然后启动系统。
在nginx的 /usr/local/nginx/html/
下创建 info.php
。
配置nginx,编辑 /usr/local/nginx/conf/nginx.conf
其中的 server
段。
1
2
3
4
5
6
7
|
location ~ \.php$ { root html; fastcgi_pass unix:/var/run/php-cgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html/$fastcgi_script_name; include fastcgi_params; } |
配置php-fpm,编辑 /usr/local/php/etc/php-fpm.conf
1
|
listen = /var/run/php-cgi.sock |
运行 nginx -s reload
重新启动nginx服务器。运行 /etc/init.d/php-fpm start
启动php-cgi监听。
在浏览器输入 your.domain/info.php
会出现php信息,成功的话,就说明LNMP配置成功了。
小内存主机配置
经过上面的步骤,已经可以成功的配置完LNMP系统,但是默认的配置情况下面,内存会相当吃紧。一会会就系统内存爆掉,Nginx会频繁报出The page you are looking for is temporarily unavailable. Please try again later.
,不配置就不能用啊。
Nginx配置
我的nginx优化配置如下,主要是配置 worker_processes
数量和fastcgi
、 gzip
缓存。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
user www www worker_processes 1; events { worker_connections 1024; use epoll; #使用高效率的epool模式 } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65 # 下面是配置缓存 client_header_buffer_size 32k; large_client_header_buffers 4 32k; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 32k; fastcgi_buffers 4 32k; fastcgi_busy_buffers_size 32k; fastcgi_temp_file_write_size 32k; # 下面是弃用gzip压缩缓存 gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; #server 的内容我就不列出了 #…. } |
MySQL配置
mysql的配置文件在 /etc/my.cnf
,我们需要配置两样东西,一个是禁用innodb,因为innodb比较消耗内存;另外是配置mysql缓存。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
[mysql] no-auto-rehash [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 open_files_limit = 600 back_log = 20 max_connections = 100 max_connect_errors = 200 table_cache = 60 external-locking = FALSE max_allowed_packet = 16M sort_buffer_size = 128K join_buffer_size = 128K thread_cache_size = 10 thread_concurrency = 8 query_cache_size = 0M query_cache_limit = 2M query_cache_min_res_unit = 2k default_table_type = MyISAM thread_stack = 192K transaction_isolation = READ-UNCOMMITTED tmp_table_size = 512K max_heap_table_size = 32M long_query_time = 1 log_long_format server-id = 1 binlog_cache_size = 2M max_binlog_cache_size = 4M max_binlog_size = 512M expire_logs_days = 7 key_buffer_size = 4M read_buffer_size = 1M read_rnd_buffer_size = 2M bulk_insert_buffer_size = 2M myisam_sort_buffer_size = 4M myisam_max_sort_file_size = 10G myisam_max_extra_sort_file_size = 10G myisam_repair_threads = 1 myisam_recover skip-innodb #禁用innodb数据库引擎 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [mysqldump] quick max_allowed_packet = 16M |
PHP配置
我们使用php-fpm来作为后台daemon响应FastCGI请求。默认的php-fpm会启动比较多的子进程,很容易耗光内存。
1
|
listen = /var/run/php-cgi.sock #使用socket监听,不用端口监听 |
1
2
3
4
|
pm.max_children = 2 #默认是50 pm.start_servers = 2 #默认是20 pm.min_spare_servers = 2 #默认是5 pm.max_spare_servers = 2 #默认是35 |
有的配置手记是建议把上面几个数字改为5,我经过多次调试之后,发现使用最小/最大连接数为2的时候,可用率比较高,内存消耗也比较小。
运行结果
经过一番折腾之后,我的 Log4D 终于配置完成了。打开速度还算凑合,用WebKaka测试截图如下。
原来的虚拟主机 dddspace.com 的响应情况:
现在 log4d.com VPS 的响应情况:
内存使用情况:
siege -c 100 -t 100 log4d.com
的测试结果:
1
2
3
4
5
6
7
8
9
10
11
12
|
Transactions: 1711 hits Availability: 96.61 % Elapsed time: 416.72 secs Data transferred: 18.20 MB Response time: 22.12 secs Transaction rate: 4.11 trans/sec Throughput: 0.04 MB/sec Concurrency: 90.84 Successful transactions: 1711 Failed transactions: 60 Longest transaction: 30.31 Shortest transaction: 1.06 |
参考链接
- wordpress nginx php-cgi mysql在128m内存下的vps安装和优化手记原创
- centos LANMP之三(编译安装 php 5.3.6)
- 编译包含 SSL 模块的 Nginx 时使用新版本的 OpenSSL 避免已知的 SSL/TLS 协议弱点
版权所有 © 2010 转载本站文章请注明: 转载自 Log4D
原文链接: http://blog.log4d.com/2011/11/vps-lnmp-setup-config/