Hacklog » 优化低内存VPS

Posted by 荒野无灯 @ 五月 19, 2010 at 11:02 上午 under   

由于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、xxswap文件
/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

关闭不需要的服务:

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 我都已经卸载了,这个肯定要禁用的。但是奇怪的是我用

居然删除不了。

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共享内存,删除所有在{zh1}3600秒内无法存取的脚本缓存,用磁盘辅助进行缓存。

[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 个:

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

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

./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)优化
引用

[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左右的空余物理内存。

本文基本参考:张宴

随机日志

  • 2010年02月28日 // (1)
  • 2008年12月31日 // (0)
  • 2010年03月6日 // (3)
  • 2008年12月24日 // (0)
  • 2009年02月15日 // (0)
  • 2009年04月26日 // (3)

 

XHTML: 留言可用标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

?

小提示:可按Ctrl+Enter快速提交 :mrgreen:

郑重声明:资讯 【Hacklog » 优化低内存VPS】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——