64MB VPS 上优化 Debian 5

debian

前几天看到 VPSLink 在打折就跑去注册了一个 64M VPS,(具体请看:VPS 主机试用:VPSLink),想看看 64MB 的 VPS 能不能跑一个小规模访问量的 WordPress 博客,这里的小规模是指每日500 PV 以下。然后分别试着跑了一下 Debian 和 CentOS,默认安装后跑Debian没有问题,但是运行 CentOS 时明显感到系统很慢。CentOS/RHEL 官方推荐的最小配置(不带图形界面)虽然是 64MB 内存,但是考虑到同时要跑 MySQL,PHP,Wordpress 等程序 64MB CentOS就有点吃力了。还有一个考虑就是运行一次 yum 需要比 apt-get 多得多的内存资源。所以按照我的 VPS 配置,64MB内存,128MB 交换,2.5GB 的硬盘,就只能选 Debian 了。

Debian 是一个古老,严谨,自由而且流行的 Linux 发行版,有 n 多的软件包可以用,有很好的稳定性和安全性,是各大 Linux hosting 服务商的主流系统之一,几乎所有 Linux VPS 都支持 Debian 版本。安装 Debian 的系统最低内存要求是 64MB,但是官方文档也说了真正的最低内存配置要比 64MB 低一些,根据不同的硬件体系安装在只有 48MB 的 i386 上也是可能的。

查看 VPS 配置

1、查看以下 VPS 的硬件信息,做到心中有数

# free
# cat /proc/cpuinfo

安装和升级系统

2、登录 VPS 安装 Debian 5

3、安装完毕后马上升级整个系统

# apt-get update && apt-get upgrade

寻找小资源的替代软件

4、用 pdksh 替代 bash

当你在使用 64MB VPS 的时候,为了多压榨一些可用的内存通常不得不去用一些轻量的程序替代那些笨重的程序,比如用 niginx/lighttpd 替代 apache,把省下来的内存留给那些必须的程序,像省钱一样不是吗?,把一些不必要的开支省下来应付那些必不可少的开支,用在刀刃上。

Bash 是现在大多数 Linux 发行版本的默认 shell,是大多数 Linux 命令行用户的默认界面。从本人十多年前接触 Linux 以来,换过很多发行版本,换过不同的邮件服务器,换过不同的 web/ftp 服务器。不过从来没有换过 shell,期间试过一些不同的 shell,如csh,korn shell,不过总是感觉不满意。随着 bash 功能的增强,多年下来 bash 也变得越来越臃肿,消耗越来越多的 CPU 资源,占据越来越多的内存。由于我的电脑也在与时俱进的更新换代,硬件越来越强大,所以 bash 用到的那一点点资源都不是问题,甚至都感觉不到。当有一天我需要在一个 64MB 的 VPS 上运行 WordPress的时候,才发现 bash 的”身材”一点也不苗条。一个只有 64MB 的机器如果有多人同时登录的话,bash 占据的内存就显得比较可观了(那可是只有 64MB 的 VPS)。所以需要用一个轻量级的 shell 来替换 bash。

在网上搜了一圈,最终落在 pdksh 上,pdksh 是从 korn shell 的分出来的一个版本,这里有更多关于 pdksh 的介绍。运行一个 bash 需要 4MB 左右的内存,而运行一个 pdksh 只要 1MB 左右。如果你的习惯和我一样一登录上来就启6个 ssh 的话,那么替换掉bash绝对必要,那可是约 18MB 左右的内存,对于只有 64MB 的主机来说是一个大买卖。让我来解释一下买卖 : ),对于一般用户来说现在 VPS 提供的硬盘够用了,带宽够了,CPU 也够了,唯独 VPS 配置里面最紧缺的就是内存。现在提供 64MB VPS 主机的 hosting服务商一般都把价格定在8美元每月到20美元每月之间,那 18MB 可就是省了2美元到6美元每个月。pdksh 看上去像是个很好的 bash 替代品,简单,自动 tab 补齐, history 记录,bourne shell 的语法(如果你不喜欢 csh/tcsh 的话),这已经足够了,正是我需要的。如果你对 shell 感兴趣的话,这里有更多关于不同shell的比较

# ps -C bash v
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 1254 ?        Ss     0:00     26   663  2272    36  1.2 /bin/bash --

# apt-get install pdksh
# chsh -s /bin/pdksh

重新用 ssh 登录 VPS

# ps -C pdksh v
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
27700 pts/0    Rs     0:00     17   174  1765   344  0.5 -pdksh

值得注意的是,如果你用的是 VPSLink 的 VPS 的话会发现即使替换掉了 bash 系统还是会自动启动一个bash进程出来,原来 VPSLink 在 /etc/inittab 的最后加了一行,只要把最后一行的 /bin/bash 改成 /bin/sh 或者 /bin/pdksh,运行 init q 重新载入 init(1),然后 kill 掉那个 bash 进程就可以了。

shell 是个很个人的事情,一旦你习惯了一种 shell 就不大容易马上替换掉它,就像虽然我知道 nano 比 vi 更小巧更简单,需要的内存更少,但是我也不会用 nano 来替换 vi 的,我不能没有 vi。

5、用 Dropbear 替代 OpenSSH

OpenSSH 是个必不可少的服务程序,不过如果同时很多次登录 ssh 的也会吃掉很多内存,用一个轻量级的程序替代的话会省下更多的内存。Dropbear 是一个相对较小的 SSH 2 服务器,这里有更多关于 Dropbear介绍 的信息。如果不需要 OpenSSH 其他强大的功能的话 Dropbear 是一个不错的替代品,很多嵌入式产品,如:路由器,交换机等都把 Dropbear 作为默认的 SSH 服务。Dropbear 体积小还有一个原因是:如果你用非 root 用户登录,Dropbear 只需要创建1个进程,而 OpenSSH 则需要创建2个进程,更多的进程意味着更多的地址空间,更多的内存资源。虽然从功能上说 Dropbear 目前还不如 OpenSSH 强大,不过如果只想拿它来做远程登录 VPS,打打几个命令来管理一下 VPS 还是可以的。重要的是相对于 OpenSSH 的庞大体积来说,Dropbear 省了大约30%到50%的内存。

# touch /etc/ssh/sshd_not_to_be_run
# apt-get install dropbear
# vi /etc/default/dropbear
# /etc/init.d/dropbear start

6、用 syslog-ng 替代 rsyslog

Rsyslog 是 Debian 5 的默认日志工具,是一个专注于安全和稳定的增强型多线程日志工具,有着丰富的功能,强大的可定制能力,可以把日志写入数据库(支持 MySQL,PostgresSQL,Oracle 等),E-mail 警报,可定制的日志输出等等,不过对于一个运行在 64MB VPS 的博客/网站来说,Rsyslog 未免显得过于强大,功能强大就意味着占用更多的 CPU/内存 资源。但是也不能没有一个日志工具,没有系统日志记录功能的系统是非常危险的,尤其是受到外部或者内部的威胁的时候,监控排错都需要一个好的日志系统的支持。不用日志系统就像用 gcc 不用 gdb 一样,调试程序不用 debug 一样。

Syslog-ng 是一个不错的 Rsyslog 替代品,被 SUSE,Fedora,旧版本 Debian, Gentoo 等发行版当作默认日志工具。不过 apt-get install syslog-ng 后发现 syslog-ng需要 libevtlog0, libglib2.0-0,libglib2.0-data 软件包,并且需要约 5349KB 的额外硬盘空间,这对一个只有2.5GB硬盘的 VPS 来说”太”大了,5MB 空间可以写500篇左右的博客啊。

看了这篇 Limitations of syslogd on Unix 和这篇 Logging with syslog-ng 以后觉得 syslog-ng 的增强功能对于我这个小小 VPS 来说不必要,用简单的 syslogd 就可以满足我的要求,于是决定用 syslogd 来替代 Rsyslog。注意安装 syslogd 的软件包名字是 sysklogd。

# ps -C rsyslogd v
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
 20441 ?        Sl     0:00      0   27 32836  1220  1.8 /usr/sbin/rsyslogd -c3

# apt-get install sysklogd && dpkg --purge rsyslog

# ps -C syslogd v
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
27769 ?        Ss     0:00     11    25  1806   324  0.4 /sbin/syslogd

评论 (24 Comments)

  1. 我发现上面的文章都是好文章。

  2. 不错,有没有其它服务器软件配置方面的信息?

  3. 你可以在博客上找找,不知道你说的是哪方面的服务器软件,web/ftp/mail/dns/database?

  4. 写得太好了,精品:-)
    打算买个64M的玩(只有钱买个这么大的),在虚拟机上装着试,64M跑php+nginx+mysql还真是很吃力,刚安装有wordpress,一个页面要2秒左右的执行时间;如果安装wp super cache应该会好很多,跑静态页面相当快~
    要是有个64M内存专用的deibian就好了,其实可以很快的

  5. 如果你的 wordpress 博客每天访问量不超过 1000pv 的话,64M 应该可以应付。(64MB 的 VPS 能支持多少访问量?

  6. 写的真不错,收藏下.
    估计到时候学 调优 的时候用的上

  7. 今天刚折腾了一个64M的vps,这篇文章很受用。

  8. 经测试之后替换bash为pdksh就可以正常执行apt-get了orz…

  9. 用pdksh的話不如用mksh,最少有persistent history可用。

  10. 用 syslog-ng 替代 rsyslog 有问题啊

    1475 rsyslogd 60240

    1310 klogd 3800
    1367 syslogd 5904

    用free -m 查看但是总的内存没少呢?
    是不是已用的不释放啊?

  11. Linux 有吃内存的习惯,看总的内存看不出来,你要看你的 log 程序/进程分别占用多少内存。

  12. 都通过了.
    只占用46M内存.博主很强大啊!
    # free -m
    total used free shared buffers cached
    Mem: 523 46 477 0 2 7
    -/+ buffers/cache: 36 487

    唯一不同的是 输入光标前的 帐号名$# 不见了.
    是光的了:)

  13. 悲剧呐,连bash都替换不了,可以进pdksh,然后我就想在pdksh下chsh -s /bin/dpksh,提示输入密码,我就填了个登录密码,居然说PAM authencation failed,残念了~博主帮我!!

  14. 呵呵,我买的vps都是128M ,暂时还吃的消,就是对openssh的2个进程比较烦。看来是时候替换了。

  15. 128MB跑centos都有点勉强,yum一下老是会挂掉

  16. @ray
    所以 <= 128MB 小内存的 VPS 推荐 Debian/Ubuntu,主要是因为 apt-get 消耗少。

  17. 在128M内存的VPS上换掉了openssh和bash,这两个东东确实比较占内存。openssh占用1.1%,bash占0.6%,换后dropbear 0.5%,pdksh 0.2%.
    谢谢楼主。

  18. 大哥,您这用syslog-ng时候安装了libevtlog 这个只是DEBIAN系统需要吧 您在rh 或者centos上做测试了吗 还需要??

    这个libevtlog 跟libdbi都是干什么的呢 请您指教

  19. 我邮箱40470342@qq.com

  20. @骡子NO.1
    syslog-ng 需要 libevtlog0, libglib2.0-0,libglib2.0-data 等约 5349KB 的额外硬盘空间,所以这里没有用 syslog-ng,用的是 sysklogd 替代。

    libevtlog0 和 libdbi 都是 syslog-ng 需要的库文件,libevtlog 用来代替 UNIX 上的 syslog() API,给程序提供接口方便创建、格式化、输出日志。 libdbi 用来给 C 语言提供独立的数据库开发接口,相当于 Perl 的 DBI/DBD 层。

  21. 能做个64mb.nginx的优化么

  22. 博主,做个nginx的安装优化包,128主要跑静态

  23. 站长这个主题是什么主题,我觉得不错,我的vps配置也蛮低,站长的主题比较静态和简朴,我很喜欢。
    忘告知!

    ps:关于mysql的优化,真的不错,能不能把apache的优化也贴出来啊

  24. @子虚乌有
    主题是 vpsee,目前不提供下载:(

发表评论