优化低内存VPS
由于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=2621443、创建swap文件
/sbin/mkswap swapfile4、激活swap文件
/sbin/swapon swapfile5、查看一下swap是否正确:
/sbin/swapon -s6、加到 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服务器上的配置优化》







我用的lnmpa一键安装包,安装后放了五六个网站,用了刚刚200M的内存
博主你好 我又来请教了 你这个 图片放大 移动 这个用的是什么插件呢。 我用的那个 虽然也能放大 拖动图片 但不支持前一张 后一张的浏览 我很喜欢你用的这个哦。期待分享一下。
好复杂……
我的是720MB的内存
这个我喜欢。。
我跑着一个老机器。。用来当陆游器。。 只有2根128的SD RAM 实在慢。。
无聊用他学PHP 。。 跑自己的程序。。 采集后数据一大 MYSQL 就耗近了所有内存。。 无奈,TAOBAO 上买了跟 512SDRAM 。。。汗。。 折腾吧
EA的话1MB根本不能起到优化作用,反而会降低总体性能。如果你的站流量不算很大,Apache2就足够了
只为折腾
-,,- 折腾也得找些有意思的吧。。DRY
这个不错:
for ($i=1;$=0;$++) {
echo “It’s the $i times I die”;
}