Skip to content

优化低内存VPS

2010 五月 19
by 荒野无灯

由于VPS 内存只有512M ,不得不采取一些方法来优化下了。

对于OpenVZ的VPS,由于不支持swap,只能省着点用内存了。
只有Xen的VPS可以,OpenVZ不支持添加swap

《VPS优化之添加swap交换分区》
 1、进入一个目录
cd /var/

  2、获取256M的文件块:
dd if=/dev/zero of=swapfile bs=1024 count=262144

  3、创建swap文件
/sbin/mkswap swapfile

  4、激活swap文件
/sbin/swapon swapfile

  5、查看一下swap是否正确:
/sbin/swapon -s

  6、加到 fstab文件中让系统引导时自动启动
vi /etc/fstab

在末尾增加以下内容:
/var/swapfile swap swap defaults 0 0
也可以执行如下命令,感觉这样更方便
echo “/var/swapfile swap swap defaults 0 0″ >>/etc/fstab

顺便附上DD命令的参数介绍:
dd命令
功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令实现DOS下的diskcopy命令的作用。先用dd命令把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件写入第二张软盘上,完成diskcopy的功能。需要注意的是,应该将硬盘上的寄存文件用rm 命令删除掉。系统默认使用标准输入文件和标准输出文件。
语法:dd [选项]

if =输入文件(或设备名称)。

of =输出文件(或设备名称)。

ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。

skip = blocks 跳过读入缓冲区开头的ibs*blocks块。

obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。

bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。

cbs = byte 一次转换bytes字节。

count=blocks 只拷贝输入的blocks块。
摘自:http://www.vpser.net/opt/vps-add-swap.html

1
2
3
4
5
6
7
apt-get install chkconfig
#查看系统当前运行级别
runlevel
#查看服务器当前开放的端口
netstat -ln
#查看服务器运行的服务
chkconfig --list

关闭不需要的服务:

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
root@vps:~# chkconfig --list
apache2                   0:off  1:off  2:on   3:on   4:on   5:on   6:off
bind9                     0:off  1:off  2:on   3:on   4:on   5:on   6:off
bootlogd                  0:off  1:off  2:off  3:off  4:off  5:off  6:off
console-setup             0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on
cron                      0:off  1:off  2:off  3:off  4:off  5:off  6:off
fetchmail                 0:off  1:off  2:on   3:on   4:on   5:on   6:off
hwclock                   0:off  1:off  2:off  3:off  4:off  5:off  6:off
hwclock-save              0:off  1:off  2:off  3:off  4:off  5:off  6:off
keyboard-setup            0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on
killprocs                 0:off  1:on   2:off  3:off  4:off  5:off  6:off
klogd                     0:off  1:off  2:on   3:on   4:on   5:on   6:off
module-init-tools         0:off  1:off  2:off  3:off  4:off  5:off  6:off
mysqld                    0:off  1:off  2:off  3:off  4:off  5:off  6:off
networking                0:on   1:off  2:off  3:off  4:off  5:off  6:off
nginx                     0:off  1:off  2:off  3:off  4:off  5:off  6:off
ondemand                  0:off  1:off  2:on   3:on   4:on   5:on   6:off
postfix                   0:off  1:off  2:on   3:on   4:on   5:on   6:off
procps                    0:off  1:off  2:off  3:off  4:off  5:off  6:off
quota                     0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on
quotarpc                  0:off  1:off  2:on   3:on   4:on   5:on   6:off
rc.local                  0:off  1:off  2:on   3:on   4:on   5:on   6:off
rcS                       0:off  1:off  2:off  3:off  4:off  5:off  6:off
rsync                     0:off  1:off  2:on   3:on   4:on   5:on   6:off
samba                     0:off  1:off  2:on   3:on   4:on   5:on   6:off
screen-cleanup            0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on
sendmail                  0:off  1:off  2:on   3:on   4:on   5:on   6:off
sendsigs                  0:on   1:off  2:off  3:off  4:off  5:off  6:off
ssh                       0:off  1:off  2:on   3:on   4:on   5:on   6:off
stop-bootlogd             0:off  1:off  2:off  3:off  4:off  5:off  6:off
stop-bootlogd-single      0:off  1:off  2:off  3:off  4:off  5:off  6:off
sysklogd                  0:off  1:off  2:on   3:on   4:on   5:on   6:off
udev                      0:off  1:off  2:off  3:off  4:off  5:off  6:off
udev-finish               0:off  1:off  2:off  3:off  4:off  5:off  6:off
udevmonitor               0:off  1:off  2:off  3:off  4:off  5:off  6:off
udevtrigger               0:off  1:off  2:off  3:off  4:off  5:off  6:off
umountfs                  0:on   1:off  2:off  3:off  4:off  5:off  6:off
umountnfs.sh              0:on   1:off  2:off  3:off  4:off  5:off  6:off
umountroot                0:on   1:off  2:off  3:off  4:off  5:off  6:off
urandom                   0:on   1:off  2:off  3:off  4:off  5:off  6:off  S:on
vzquota                   0:on   1:on   2:on   3:on   4:on   5:on   6:off
x11-common                0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on

apache2 我都已经卸载了,这个肯定要禁用的。但是奇怪的是我用

1
 chkconfig --del apache2

居然删除不了。

Nginx 的主配置文件(nginx.conf)优化

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
  user  www www;


#Nginx每个进程耗费10M~12M内存,这里只开启一个Nginx进程,节省内存。
worker_processes 1;

error_log  /data1/logs/nginx_error.log  crit;

pid        /usr/local/webserver/nginx/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;

events
{
use epoll;
worker_connections 51200;
}

http
{
include       mime.types;
default_type  application/octet-stream;

#charset  gb2312;
   
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
   
sendfile on;
tcp_nopush     on;

keepalive_timeout 60;

tcp_nodelay on;

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

#对网页文件、CSS、JS、XML等启动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;

#limit_zone  crawler  $binary_remote_addr  10m;

server
{
   listen       80;
   server_name  blog.s135.com www.s135.com s135.com *.s135.com;
   index index.html index.htm index.php;
   root  /data0/htdocs/blog;

   #limit_conn   crawler  20;    



   location ~ .*\.(php|php5)?$
   {
     #将Nginx与FastCGI的通信方式由TCP改为Unix Socket。TCP在高并发访问下比Unix Socket稳定,但Unix Socket速度要比TCP快。
     fastcgi_pass  unix:/tmp/php-cgi.sock;
     #fastcgi_pass  127.0.0.1:9000;
     fastcgi_index index.php;
     include fcgi.conf;
   }

   location ~ /read.php
   {
     #将Nginx与FastCGI的通信方式由TCP改为Unix Socket。TCP在高并发访问下比Unix Socket稳定,但Unix Socket速度要比TCP快。
     fastcgi_pass  unix:/tmp/php-cgi.sock;
     #fastcgi_pass  127.0.0.1:9000;
     fastcgi_index index.php;
     include fcgi.conf;
   }
 
   #博客的图片较多,更改较少,将它们在浏览器本地缓存15天,可以提高下次打开我博客的页面加载速度。
   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
   {
     expires      15d;
   }

   #博客会加载很多JavaScript、CSS,将它们在浏览器本地缓存1天,访问者在看完一篇文章或一页后,再看另一篇文件或另一页的内容,无需从服务器再次下载相同的JavaScript、CSS,提高了页面显示速度。
   location ~ .*\.(js|css)?$
   {
     expires      1d;
   }  

   log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for';
   access_log  /data1/logs/access.log  access;
   }
}

PHP 5.3.2(Fast-pfm)的配置优化

1、php.ini 配置文件中关于eAcelerator的优化。只使用1M共享内存,删除所有在最后3600秒内无法存取的脚本缓存,用磁盘辅助进行缓存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[eaccelerator]
zend_extension="/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so"
eaccelerator.shm_size="1"
eaccelerator.cache_dir="/usr/local/webserver/eaccelerator_cache"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="3600"
eaccelerator.shm_prune_period="3600"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.keys = "disk_only"
eaccelerator.sessions = "disk_only"
eaccelerator.content = "disk_only"

  2、php-fpm.conf 的配置优化
  修改两项,一是修改以下一行,将启动的php-cgi进程数由原来的128个改为5 个:

1
<value name="max_children">5</value>

 二是修改以下一行,将TCP模式改为Unix Socket模式:
引用

1
<value name="listen_address">/tmp/php-fpm.sock</value>

MySQL 5 配置优化
  1、使用以下参数编译安装的 MySQL 5 默认支持4种存储引擎:CSV、MRG_MYISAM、MEMORY、MyISAM,不支持InnoDB存储引擎。由于内存有限,而InnoDB耗费的内存较大,这里推荐使用MyISAM存储引擎。

1
2
./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile
make && make install

  2、MySQL 5.1 配置文件(my.cnf)优化
引用

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
56
[client]
port    = 3306
socket  = /tmp/mysql.sock

[mysql]
prompt="(\u:s135:)[\d]> "
no-auto-rehash

[mysqld]
user    = mysql
port    = 3306
socket  = /tmp/mysql.sock
basedir = /usr/local/webserver/mysql
datadir = /usr/local/webserver/mysql/data
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
/usr/local/webserver/mysql/data/slow.log
/usr/local/webserver/mysql/data/error.log
long_query_time = 1
log_long_format
server-id = 1
#log-bin = /usr/local/mysql/data/binlog
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

[mysqldump]
quick
max_allowed_packet = 16M

优化后的效果:

mysql_pdo 和 imagick 这两个组件不属于本文内容,这里也帖出来看下:

top查看结果表明,5个 php-fpm 进程大概使用了125 M 物理内存,mysqld 大概使用了16M 内存,再加上两个 nginx 进程各使用10M内存,另外还有一个php-fpm 使用了 4M 左右的内存。这里总共使用的物理内存量为 165 M 左右 。
跑wordpress 在后台再也不会出现

Fatal error: Out of memory (allocated 16515072) (tried to allocate 311296 bytes)

然后就ssh 和 ftp 都连不上了,看来优化配置是非常的重要。现在我VPS 基本还有200M左右的空余物理内存。

本文基本参考:张宴 《Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化》

喜欢这篇文章吗?

请订阅本站 RSS feed填写您的邮件地址,订阅我们的精彩内容:,欢迎点击这里捐赠以支持荒野无灯转播到腾讯微博 转播到腾讯微博

作者:荒野无灯
出处:Hacklog【Hacklog】

声明: 本站遵循 署名-非商业性使用-相同方式共享 3.0 共享协议. 转载请注明转自Hacklog【荒野无灯weblog】

本文链接: http://ihacklog.com/?p=3821

10 Responses Post a comment
  1. 六月 7, 2011

    我用的lnmpa一键安装包,安装后放了五六个网站,用了刚刚200M的内存

  2. 三月 19, 2011

    博主你好 我又来请教了 你这个 图片放大 移动 这个用的是什么插件呢。 我用的那个 虽然也能放大 拖动图片 但不支持前一张 后一张的浏览 我很喜欢你用的这个哦。期待分享一下。

  3. 九月 26, 2010

    好复杂……
    我的是720MB的内存

  4. 六月 23, 2010

    这个我喜欢。。
    我跑着一个老机器。。用来当陆游器。。 只有2根128的SD RAM 实在慢。。
    无聊用他学PHP 。。 跑自己的程序。。 采集后数据一大 MYSQL 就耗近了所有内存。。 无奈,TAOBAO 上买了跟 512SDRAM 。。。汗。。 折腾吧

  5. 五月 24, 2010

    EA的话1MB根本不能起到优化作用,反而会降低总体性能。如果你的站流量不算很大,Apache2就足够了

  6. 五月 19, 2010

    :!: 对我来说太复杂了啊,有没有立杆见影的方法,我的VPS才256M,是XEN的。博主给体检体检啊,给个解决方案。

Leave a Reply

Allowed Tags - You may use these HTML tags and attributes in your comment.

<a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <q cite=""> <strong>

 :wink:  :-|  :-x  :twisted:  :)  8-O  :(  :roll:  :-P  :oops:  :-o  :mrgreen:  :lol:  :idea:  :-D  :evil:  :cry:  8)  :arrow:  :-?  :?:  :!:

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS