Linux 性能监测:CPU

CPU 的占用主要取决于什么样的资源正在 CPU 上面运行,比如拷贝一个文件通常占用较少 CPU,因为大部分工作是由 DMA(Direct Memory Access)完成,只是在完成拷贝以后给一个中断让 CPU 知道拷贝已经完成;科学计算通常占用较多的 CPU,大部分计算工作都需要在 CPU 上完成,内存、硬盘等子系统只做暂时的数据存储工作。要想监测和理解 CPU 的性能需要知道一些操作系统的基本知识,比如:中断、进程调度、进程上下文切换、可运行队列等。这里 VPSee 用个例子来简单介绍一下这些概念和他们的关系,CPU 很无辜,是个任劳任怨的打工仔,每时每刻都有工作在做(进程、线程)并且自己有一张工作清单(可运行队列),由老板(进程调度)来决定他该干什么,他需要和老板沟通以便得到老板的想法并及时调整自己的工作(上下文切换),部分工作做完以后还需要及时向老板汇报(中断),所以打工仔(CPU)除了做自己该做的工作以外,还有大量时间和精力花在沟通和汇报上。

CPU 也是一种硬件资源,和任何其他硬件设备一样也需要驱动和管理程序才能使用,我们可以把内核的进程调度看作是 CPU 的管理程序,用来管理和分配 CPU 资源,合理安排进程抢占 CPU,并决定哪个进程该使用 CPU、哪个进程该等待。操作系统内核里的进程调度主要用来调度两类资源:进程(或线程)和中断,进程调度给不同的资源分配了不同的优先级,优先级最高的是硬件中断,其次是内核(系统)进程,最后是用户进程。每个 CPU 都维护着一个可运行队列,用来存放那些可运行的线程。线程要么在睡眠状态(blocked 正在等待 IO)要么在可运行状态,如果 CPU 当前负载太高而新的请求不断,就会出现进程调度暂时应付不过来的情况,这个时候就不得不把线程暂时放到可运行队列里。VPSee 在这里要讨论的是性能监测,上面谈了一堆都没提到性能,那么这些概念和性能监测有什么关系呢?关系重大。如果你是老板,你如何检查打工仔的效率(性能)呢?我们一般会通过以下这些信息来判断打工仔是否偷懒:

  • 打工仔接受和完成多少任务并向老板汇报了(中断);
  • 打工仔和老板沟通、协商每项工作的工作进度(上下文切换);
  • 打工仔的工作列表是不是都有排满(可运行队列);
  • 打工仔工作效率如何,是不是在偷懒(CPU 利用率)。

现在把打工仔换成 CPU,我们可以通过查看这些重要参数:中断、上下文切换、可运行队列、CPU 利用率来监测 CPU 的性能。

底线

上一篇 Linux 性能监测:介绍 提到了性能监测前需要知道底线,那么监测 CPU 性能的底线是什么呢?通常我们期望我们的系统能到达以下目标:

  • CPU 利用率,如果 CPU 有 100% 利用率,那么应该到达这样一个平衡:65%-70% User Time,30%-35% System Time,0%-5% Idle Time;
  • 上下文切换,上下文切换应该和 CPU 利用率联系起来看,如果能保持上面的 CPU 利用率平衡,大量的上下文切换是可以接受的;
  • 可运行队列,每个可运行队列不应该超过3个线程(每处理器),比如:双处理器系统的可运行队列里不应该超过6个线程。

vmstat

vmstat 是个查看系统整体性能的小工具,小巧、即使在很 heavy 的情况下也运行良好,并且可以用时间间隔采集得到连续的性能数据。

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  1    140 2787980 336304 3531996  0    0     0   128 1166 5033  3  3 70 25  0
 0  1    140 2788296 336304 3531996  0    0     0     0 1194 5605  3  3 69 25  0
 0  1    140 2788436 336304 3531996  0    0     0     0 1249 8036  5  4 67 25  0
 0  1    140 2782688 336304 3531996  0    0     0     0 1333 7792  6  6 64 25  0
 3  1    140 2779292 336304 3531992  0    0     0    28 1323 7087  4  5 67 25  0

参数介绍:

  • r,可运行队列的线程数,这些线程都是可运行状态,只不过 CPU 暂时不可用;
  • b,被 blocked 的进程数,正在等待 IO 请求;
  • in,被处理过的中断数
  • cs,系统上正在做上下文切换的数目
  • us,用户占用 CPU 的百分比
  • sy,内核和中断占用 CPU 的百分比
  • wa,所有可运行的线程被 blocked 以后都在等待 IO,这时候 CPU 空闲的百分比
  • id,CPU 完全空闲的百分比

举两个现实中的例子来实际分析一下:

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 4  0    140 2915476 341288 3951700  0    0     0     0 1057  523 19 81  0  0  0
 4  0    140 2915724 341296 3951700  0    0     0     0 1048  546 19 81  0  0  0
 4  0    140 2915848 341296 3951700  0    0     0     0 1044  514 18 82  0  0  0
 4  0    140 2915848 341296 3951700  0    0     0    24 1044  564 20 80  0  0  0
 4  0    140 2915848 341296 3951700  0    0     0     0 1060  546 18 82  0  0  0

从上面的数据可以看出几点:

  1. interrupts(in)非常高,context switch(cs)比较低,说明这个 CPU 一直在不停的请求资源;
  2. system time(sy)一直保持在 80% 以上,而且上下文切换较低(cs),说明某个进程可能一直霸占着 CPU(不断请求资源);
  3. run queue(r)刚好在4个。
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
14  0    140 2904316 341912 3952308  0    0     0   460 1106 9593 36 64  1  0  0
17  0    140 2903492 341912 3951780  0    0     0     0 1037 9614 35 65  1  0  0
20  0    140 2902016 341912 3952000  0    0     0     0 1046 9739 35 64  1  0  0
17  0    140 2903904 341912 3951888  0    0     0    76 1044 9879 37 63  0  0  0
16  0    140 2904580 341912 3952108  0    0     0     0 1055 9808 34 65  1  0  0

从上面的数据可以看出几点:

  1. context switch(cs)比 interrupts(in)要高得多,说明内核不得不来回切换进程;
  2. 进一步观察发现 system time(sy)很高而 user time(us)很低,而且加上高频度的上下文切换(cs),说明正在运行的应用程序调用了大量的系统调用(system call);
  3. run queue(r)在14个线程以上,按照这个测试机器的硬件配置(四核),应该保持在12个以内。

mpstat

mpstat 和 vmstat 类似,不同的是 mpstat 可以输出多个处理器的数据,下面的输出显示 CPU1 和 CPU2 基本上没有派上用场,系统有足够的能力处理更多的任务。

$ mpstat -P ALL 1
Linux 2.6.18-164.el5 (vpsee) 	11/13/2009

02:24:33 PM  CPU   %user   %nice    %sys %iowait    %irq   %soft  %steal   %idle    intr/s
02:24:34 PM  all    5.26    0.00    4.01   25.06    0.00    0.00    0.00   65.66   1446.00
02:24:34 PM    0    7.00    0.00    8.00    0.00    0.00    0.00    0.00   85.00   1001.00
02:24:34 PM    1   13.00    0.00    8.00    0.00    0.00    0.00    0.00   79.00    444.00
02:24:34 PM    2    0.00    0.00    0.00  100.00    0.00    0.00    0.00    0.00      0.00
02:24:34 PM    3    0.99    0.00    0.99    0.00    0.00    0.00    0.00   98.02      0.00

ps

如何查看某个程序、进程占用了多少 CPU 资源呢?下面是 Firefox 在 VPSee 的一台 Sunray 服务器上的运行情况,当前只有2个用户在使用 Firefox:

$ while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep 'firefox'; sleep 1; done

  PID  NI PRI %CPU PSR COMMAND
 7252   0  24  3.2   3 firefox
 9846   0  24  8.8   0 firefox
 7252   0  24  3.2   2 firefox
 9846   0  24  8.8   0 firefox
 7252   0  24  3.2   2 firefox

Linux 性能监测:介绍
Linux 性能监测:Memory
Linux 性能监测:IO
Linux 性能监测:Network
Linux 性能监测:工具

Linux 性能监测:介绍

看了某某教程、读了某某手册,按照要求改改某某设置、系统设定、内核参数就认为做到系统优化的想法很傻很天真:)系统优化是一项复杂、繁琐、长期的工作,优化前需要监测、采集、测试、评估,优化后也需要测试、采集、评估、监测,而且是一个长期和持续的过程,不是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书本上的优化就适合眼下正在运行的系统,不同的系统、不同的硬件、不同的应用优化的重点也不同、优化的方法也不同、优化的参数也不同。性能监测是系统优化过程中重要的一环,如果没有监测、不清楚性能瓶颈在哪里,优化什么呢、怎么优化呢?所以找到性能瓶颈是性能监测的目的,也是系统优化的关键。系统由若干子系统构成,通常修改一个子系统有可能影响到另外一个子系统,甚至会导致整个系统不稳定、崩溃。所以说优化、监测、测试通常是连在一起的,而且是一个循环而且长期的过程,通常监测的子系统有以下这些:

  • CPU
  • Memory
  • IO
  • Network

这些子系统互相依赖,了解这些子系统的特性,监测这些子系统的性能参数以及及时发现可能会出现的瓶颈对系统优化很有帮助。

应用类型

不同的系统用途也不同,要找到性能瓶颈需要知道系统跑的是什么应用、有些什么特点,比如 web server 对系统的要求肯定和 file server 不一样,所以分清不同系统的应用类型很重要,通常应用可以分为两种类型:

  • IO 相关,IO 相关的应用通常用来处理大量数据,需要大量内存和存储,频繁 IO 操作读写数据,而对 CPU 的要求则较少,大部分时候 CPU 都在等待硬盘,比如,数据库服务器、文件服务器等。
  • CPU 相关,CPU 相关的应用需要使用大量 CPU,比如高并发的 web/mail 服务器、图像/视频处理、科学计算等都可被视作 CPU 相关的应用。

看看实际中的例子,第1个是文件服务器拷贝一个大文件时表现出来的特征,第2个是 CPU 做大量计算时表现出来的特征:

$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  4    140 1962724 335516 4852308  0    0   388 65024 1442  563  0  2 47 52  0
 0  4    140 1961816 335516 4853868  0    0   768 65536 1434  522  0  1 50 48  0
 0  4    140 1960788 335516 4855300  0    0   768 48640 1412  573  0  1 50 49  0
 0  4    140 1958528 335516 4857280  0    0  1024 65536 1415  521  0  1 41 57  0
 0  5    140 1957488 335516 4858884  0    0   768 81412 1504  609  0  2 50 49  0
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 4  0    140 3625096 334256 3266584  0    0     0    16 1054  470 100 0  0  0  0
 4  0    140 3625220 334264 3266576  0    0     0    12 1037  448 100 0  0  0  0
 4  0    140 3624468 334264 3266580  0    0     0   148 1160  632 100 0  0  0  0
 4  0    140 3624468 334264 3266580  0    0     0     0 1078  527 100 0  0  0  0
 4  0    140 3624712 334264 3266580  0    0     0    80 1053  501 100 0  0  0  0

上面两个例子最明显的差别就是 id 一栏,代表 CPU 的空闲率,拷贝文件时候 id 维持在 50% 左右,CPU 大量计算的时候 id 基本为 0。

底线

我们如何知道系统性能是好还是差呢?这需要事先建立一个底线,如果性能监测得到的统计数据跨过这条线,我们就可以说这个系统性能差,如果数据能保持在线内我们就说性能好。建立这样底线需要知道一些理论、额外的负载测试和系统管理员多年的经验。如果自己没有多年的经验,有一个简单划底线的办法就是:把这个底线建立在自己对系统的期望上。自己期望这个系统有个什么样的性能,这是一个底线,如果没有达到这个要求就是性能差。比如,VPSee 上个月有个 RAID0 的测试,期望的测试结果应该是 RAID0 的 IO 性能比单硬盘有显著提高,底线是 RAID0 的 IO 至少要比单硬盘要好(好多少不重要,底线是至少要好),测试结果却发现 RAID0 性能还不如单硬盘,说明性能差,这个时候需要问个为什么,这往往是性能瓶颈所在,经过排查发现是原硬盘有硬件瑕疵造成性能测试结果错误。

监测工具

我们只需要简单的工具就可以对 Linux 的性能进行监测,以下是 VPSee 常用的工具:

工具 简单介绍
top 查看进程活动状态以及一些系统状况
vmstat 查看系统状态、硬件和系统信息等
iostat 查看CPU 负载,硬盘状况
sar 综合工具,查看系统状况
mpstat 查看多处理器状况
netstat 查看网络状况
iptraf 实时网络状况监测
tcpdump 抓取网络数据包,详细分析
tcptrace 数据包分析工具
netperf 网络带宽工具
dstat 综合工具,综合了 vmstat, iostat, ifstat, netstat 等多个信息

接下来几天,VPSee 将会陆续介绍一些 Linux 性能监测方面的经验。

Linux 性能监测:CPU
Linux 性能监测:Memory
Linux 性能监测:IO
Linux 性能监测:Network
Linux 性能监测:工具

TOCICI:$3.95 64MB OpenVZ VPS

tocici

TOCICI 提供了3款10美元以下的 VPS,分别是 64MB 的3.95美元、128MB 的5.95美元和 256MB 的9.95美元。数据中心在 Pittock Carrier Hotel,Portland 最大的数据中心,租用的是 Forked Networking 的服务器。从 about 页面来看 TOCICI 是一家小公司,从1995年的一家提供电脑和维修服务的小公司演变成一家提供网络设计和管理的公司,并在2008年更名为现在的名字 TOCICI,其 owner 是一个系统管理员。VPS 配置如下:

Wooden VPS Copper VPS Bronze
64MB Guaranteed 128MB Guaranteed 256MB Guaranteed
128MB Burstable 256MB Burstable 512MB Burstable
1GB 硬盘 10GB 硬盘 50GB 硬盘
50GB 100GB 200GB
$3.95 $5.95 $9.95

服务器配置:

All servers are warrantied & IBM-branded equipment using only lifetime warranty RAM and 3-5 year warranty disks.

XENnode:$7.99 128MB Xen VPS

xennode

XENnode 是一家澳大利亚 VPS 提供者,应该不能称为公司或者提供商,域名是三个月前注册的,付款方式只有 paypal 而不能用信用卡,服务器租用的是 Limestone Networks 的。网站上连个 email 都没有留下,只能通过一个 live chat 联系。现在这款 VPS 使用 10%OFFPROMO 优惠码有10%的折扣。VPS 配置如下:

服务器在 Texas, Dallas
自制控制面板
5GB 硬盘
128MB RAM,256MB SWAP
100GB 带宽
7.99美元

服务器和网络配置:

All of our dedicated servers are of the latest standards, each utilizing dual cpu quad core Xeon Nehalem processors, we also utilize RAID10 configurations for data redundancy. Each server also has a dedicated uplink to TIER-1 networks, giving the stability and security needed for safe use.

CentOS 5 上部署 Nginx、Mongrel 和 Rails

接着昨天的来,昨天 VPSee 简单的安装和试用了一下 Redmine,发现 Redmine 的界面很简单清新、使用也很方便,需要的功能都有。今天打算部署到稍微专业一点的环境,Ruby on Rails 的部署方案主要有以下几种:

  • Lighttpd + FastCGI
  • Nginx + Mongrel
  • Nginx + Thin
  • Nginx + Phusion Passenger
  • Apache2 + Thin
  • Apache2 + Phusion Passenger (Mod_Rails)

目前用的比较多、比较成熟的要算 Nginx + Mongrel 和 Apache2 + Passenger 了,Apache2 + Passenger 配置很简单,非常适合多 ruby app 的部署。考虑到成熟、稳定、而且 VPSee 对 Nginx 比较熟悉,所以选定 Nginx + Mongrel 组合作为 Redmine 环境的部署方案。以下的内容虽然以 Redmine 为例来描述如何部署 Nginx + Mongrel,其配置方法也适用与一般 Rails 程序部署的情况。

安装和配置 Ruby on Rails

详细参考 “CentOS 5 上配置 Redmine 和 Git” 中的 “安装必要的软件包” 和 “安装和配置 Ruby on Rails”.

安装和配置 Mongrel

拷贝 mongrel_cluster 启动文件到 /etc/init.d/,在 /etc 下创建一个目录 mongrel_cluster 用来存放 mongrel 程序的配置文件,配置文件必须以 yml 扩展名结尾,不能是 yaml,最后修改 yml 配置文件,注意 user/group 要和前面一文的对上,否则 mongrel_cluster 启动不了:

# gem install mongrel
# gem install mongrel_cluster

# cp /usr/local/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources \
/mongrel_cluster /etc/init.d/
# chmod +x /etc/init.d/mongrel_cluster
# /sbin/chkconfig --level 345 mongrel_cluster on

# mkdir /etc/mongrel_cluster
cp /usr/local/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/defaults.yaml /etc/mongrel_cluster/redmine.yml

# vi /etc/mongrel_cluster/redmine.yml
---
cwd: /home/redmine/
port: "9000"
environment: production
address: 127.0.0.1
pid_file: log/mongrel.pid
servers: 4
group: redmine
user: redmine

启动 mongrel:

# /etc/init.d/mongrel_cluster start

安装配置 Nginx

安装完 nginx 后需要修改配置文件,nginx 支持模块化配置,为了更清晰最好把全局配置文件和 virtal host 配置文件分开,先是修改 nginx 的全局配置文件:

# yum install nginx

# vi /etc/nginx/nginx.conf
user              nginx;
worker_processes  1;
error_log         /var/log/nginx/error.log;
pid               /var/run/nginx.pid;

events {
    worker_connections  1024;
}

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

    log_format  main  '$remote_addr - $remote_user [$time_local] $request'
                      '"$status" $body_bytes_sent "$http_referer"'
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     off;
    keepalive_timeout  65;

    gzip  on;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_proxied any;
    gzip_types text/plain text/html text/css application/x-javascript 
text/xml application/xml application/xml+rss text/javascript;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/vhosts/*;
}

接着在 /etc/nginx/ 下面创建一个文件夹 vhosts 用来存放多个 virtual host 局部配置文件:

# mkdir /etc/nginx/vhosts
# vi /etc/nginx/vhosts/vpsee.com.conf

upstream mongrel_server {
        server 127.0.0.1:9000;
        server 127.0.0.1:9001;
        server 127.0.0.1:9002;
        server 127.0.0.1:9003;
}

server {
        listen  80;
        server_name  vpsee.com www.vpsee.com;

        client_max_body_size 10M;
        root   /home/redmine;

        access_log  /var/www/access_vpsee.com.log  main;

        location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect false;
            proxy_max_temp_file_size 0;

            if (-f $request_filename) {
                break;
            }
            if (-f $request_filename/index.html) {
                rewrite (.*) $1/index.html break;
            }
            if (-f $request_filename.html) {
                rewrite (.*) $1.html break;
            }
            if (!-f $request_filename) {
                proxy_pass http://mongrel_server;
                break;
            }
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
}

启动 nginx:

# /etc/init.d/nginx start

打开浏览器应该就可以访问了。

CentOS 5 上配置 Redmine 和 Git

redmine

现在我们用 Trac + Git 来管理所有的项目,早些时候是由 Trac + Subversion 管理的,和 Git 比较起来 Subversion 简直就是龟速。虽然我们前段时间换成了 Git 做版本控制,但是 web 管理界面还主要是在用 Trac 来管理,现在随着项目增多,人员变多,管理 Trac 也变得越来越麻烦。在 Trac 里改个小地方就需要动代码,比如删除 “about and help/guide, search” 导航条还需要改代码,太多需要 hack 的地方。Trac 不直接支持多项目管理(可以通过插件支持),不能很方便的分配权限给不同的项目,不适合多项目管理。现在我们需要一个能象 Github、Google Code 那样能自己注册,自己管理的多用户版本控制和项目管理工具。Redmine 是一个用 Ruby on Rails 写的类似 Trac 的工具,功能比 Trac 丰富一些,内置常用的 SCM,比如:Subversion, Git 和 Mercurial,更重要的是支持多项目多人管理、自己管理自己的项目、界面简单清晰、装上就可以用没有太多需要 hack 的地方,先用一段时间如果感觉好就打算替代 Trac.

安装必要的软件包

首先安装必要的库和软件包:

# yum install zlib-devel curl-devel expat-devel gettext-devel 
# yum install mysql-server mysql-devel openssl-devel gcc make

安装和配置 Ruby on Rails

下载 ruby 和 rubygems:

# wget http://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.gz
# wget http://rubyforge.vm.bytemark.co.uk/files/rubygems/rubygems-1.3.5.tgz

编译和安装 ruby:

# tar zxvf ruby-1.8.7.tar.gz
# cd ruby-1.8.7

# ./configure
# make
# make install

# cd ext/zlib
# ruby extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib
# cd ../../
# make
# make install

编译和安装 rubygems,安装 ruby mysql 支持:

# tar zxvf rubygems-1.3.5.tgz
# cd rubygems-1.3.5

# ruby setup.rb

# gem sources -r http://gems.rubyforge.org/
# gem sources -a http://gems.tron.name/gems.rubyforge.org/

# gem install mysql

安装 ruby on rails,指定版本号因为 redmine 需要这个版本:

# gem install rails -v=2.1.2

安装完以后检查一下是否都正确装上:

# gem list

*** LOCAL GEMS ***

actionmailer (2.1.2)
actionpack (2.1.2)
activerecord (2.1.2)
activeresource (2.1.2)
activesupport (2.1.2)
mysql (2.8.1)
rails (2.1.2)
rake (0.8.7)

安装和配置 Redmine

下载 redmine 并增加一个 redmine 用户:

# wget http://rubyforge.org/frs/download.php/66633/redmine-0.8.6.tar.gz
# /usr/sbin/adduser redmine

创建 redmine 需要的数据库:

# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 50
Server version: 5.1.40 MySQL Community Server (GPL) by Remi

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database redmine character set utf8;
mysql> grant all on redmine.* to 'redmine'@'localhost' identified by 'yourpassword';
mysql> flush privileges;

配制 redmine 环境和数据库:

# rm -rf /home/redmine
# mv redmine-0.8.6 /home/redmine
# cd /home/redmine/config
# cp database.yml.example database.yml

# vi database.yml

production:
  adapter: mysql
  database: redmine
  host: localhost
  username: redmine
  password: yourpassword
  encoding: utf8

# cd /home/redmine
# rake db:migrate RAILS_ENV="production"

# chown -R redmine:redmine /home/redmine
# chmod -R o-rwx,g-rwx /home/redmine

启动 redmine:

# su - redmine -c "ruby script/server webrick -e production"

访问 redmine,打开浏览器访问 http://your-server-ip-address:3000,输入默认用户名密码登陆:admin/admin

安装和配置 Git

安装 Git,默认 respository 没有 git,需要先安装额外的源:

# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
# yum update

# yum install git

配置和使用 Git,注意这里要修改 git_repositories 的权限,以便以 su – redmine 用户启动 redmine server 的时候有权限访问到 git_repositories 目录,所以最好把 git_repositories 建在 redmine 的下面:

# git config --global user.name "vpsee"
# git config --global user.email "admin@vpsee.com"

# mkdir -p /home/redmine/git_repositories/project1
# cd /home/redmine/git_repositories/project1
# git init
# git add .
# git commit

# chown -R redmine:redmine /home/redmine/git_repositories

Git 的基本使用和配置可以看 “CentOS 5 上配置 Trac 和 Git“。

集成 Git 到 Redmine

安装完 Git 和 Redmine 后,需要集成 Git 到 Redmine,登陆 redmine 后,新建一个 project,在 “settings->respository->SCM” 选择 git,在 “Path to .git directory” 加上 git 路径就可以了,而且还需要让 redmine 知道有 git repository 加进来。

# su - redmine -c "ruby script/runner "Repository.fetch_changesets" -e production"

redmine settings git

Swvps:$9.99 400MB OpenVZ VPS

swvps

Swvps 背后是一家叫做 SouthWest Technologies LTD 的公司。Swps 承诺他们家的 VPS 有99.6%的在线保证,并在 Service Guarantee 里提到如果 uptime 时间少于98%的话当月即免费。域名显示 swvps 是在2006年注册的,不是一家新公司,奇怪的是他们网站上有个论坛,贴子都被设为 private 不能看,估计也不能发帖。VPS 配置如下:

服务器在 PA
HyperVM 控制面板
10GB 硬盘
400MB Guaranteed RAM,800MB Burstable RAM
250GB 带宽
2个 IP
9.99美元

服务器配置:

Swvps.com only use the highest quality hardware components for our network and servers. This includes Cisco switches and Firewalls, APC UPS and PDU’s, Dell and Supermicro servers with SCSI RAID hard drives. Minimum VPS servers are Dual Intel Xeon 2.8Ghz HT with SCSI hard drives and 2GB-8GB RAM.

SmokyHosts:$7.97 128MB Virtuozzo VPS

smokyhosts

SmokyHosts 是在2004年底成立的,whois 显示 smokyhosts 域名联系人留的地址是印度,Email 留的是一个 gmail 邮箱,一点都不专业,甚至还不是一家公司。现在他们家的 VPS 正在打折,只要7.97美元每月,正常价格是10.95。奇怪的是他们家的 VPS 还有 setup fee,一般只听说 deticated server 有 setup fee,不过可以用这个优惠码:NOVSPEC50OFF 来免掉 setup fee。VPS 配置如下:

Virtuozzo Power 控制面板
10GB 硬盘
128MB Guaranteed RAM,256MB Burstable RAM
100GB 带宽
7.97美元

服务器配置:

You are hosted on powerful Intel Dual Core Servers

Macbook Pro 升级到 Snow Leopard

终于有时间坐下来重装系统了,新购的 Mac OS X Snow Leopard 早就到了,一直放在桌上,每天看着它发痒就是没有时间装,电脑上的资料无所谓都有备份,主要是不想破坏开发环境,一些曾经很难装上修改了 n 个 Makefile 和 c 文件才编译通过的库、一些特殊的配置文件等要重新安装一想就很麻烦,还有一些软件、插件等也需要重新下载。不过这次 VPSee 不想升级安装了,打算彻底重装,Macbook Pro 用了三年多就没有重装过,中途只升级了一次系统,从 Tiger 升到 Leopard。系统上面大大小小改了很多东西,改的乱七八糟,就 Android SDK 就有3个版本。

mac osx snow leopard

Snow Leopard 被炒了很久,说实话刚装完系统启动一看很一般,甚至有点失望,和 Leopard 比较没有发现什么太大的变化,桌面图标小了一点, QuickTime X 做了全新的设计。用了一下发现,新系统对细节的考虑精细了,比如 Dock 上的 Stack 改了显示方式,Terminal 默认字体更好看了,Quicktime 现在可以录制屏幕了,做教程更方便了,自带的中文输入法好用多了,不用自己下载其他的输入法了,系统自带了 VNC,连接 Linux 桌面也不需要第三方工具了。Snow Leopard 安装体积比 Leopard 小了很多,性能也有很大提高。升级到 Snow Leopard 虽然没有从 Tiger 升级到 Leopard 那样强烈,但是感觉这次升级 Apple 对细节和性能的改进还是很多的。

Mac/Mac OS X 是最适合开发人员的工具,这次升级编程语言 C/C++/Java/Python/Perl/Ruby/PHP,函数库等都有更新,集成开发环境 Xcode 也升级了。这里有个误区,国内很多朋友都以为苹果是做图形设计的不相信苹果能搞开发 ,恰恰相反,自从苹果2001年发布 Mac OS X 10,完全抛弃老系统投靠 UNIX 和 Intel 阵营后(Mach + FreeBSD + Intel),立刻吸引了一大批新老 UNIX/Linux 用户,别忘了现在是2009年,现在纯 Windows 程序基本没什么人开发了,顶多维护维护历史遗留下来的 Windows 程序,主流开发已经转向 Web 和 手机了,这使得 Mac 成为目前最理想的开发平台,现在最火的 Web 开发是 Ruby 和 Python,最火的手机开发是 iPhone 和 Android ,这些开发环境都能很好的运行在 Mac 上。忘了说 Java,现在企业开发还主要是 Java 的天下,不过也不用担心,Mac 内置 Java 环境,如果一定要用 IDE,装个 Eclipse/Netbean 就可以了。还是不相信苹果能开发?那看看这些顶级互联网公司吧,看看他们的开发人员都在用什么电脑。

Yes, vpsee.com is made on a Mac.

Umbra Hosting:$10 128MB OpenVZ VPS

umbrahosting

Umbra Hosting 2006年2月26日创立,公司管理层有超过12年的 hosting 经验。他们家的 VPS 提供99.9%的在线保障,如果当月在线达不到 99.9% 的话下个月可以得到20%的优惠,相当于打8折,这个配置就算打完折以后也没有什么吸引力,就算他们每个月都达不到99.9%的话他们也还是赚钱,除非他们敢说达不到百分之多少下个月就白送一个月我就相信他们的 VPS 真的这么稳定。VPS 配置如下:

服务器在 Chicago
HyperVM 控制面板
10GB 硬盘
128MB Guaranteed RAM,1GB Burstable RAM
250GB 带宽
10美元

服务器配置:

Our processing nodes are comprised of: Processors: Various 5100 Series, 2 x Dual Core (or Quad Core) Processors, 2 x 4MB CPU Cache, 4-8GB FB-DIMM 533 / 667 ECC RAM