Category Archive技术



Web Server/Apache/Nginx & 技术 24 Nov 2008 04:39 pm

UCenter Home 1.5 Nginx rewrite

UCenter Home 1.5 Nginx rewrite
http://www.discuz.net/forum-149-1.html

 

 rewrite ^/(space|network)-(.+)\.html$ /$1.php?rewrite=$2 last;
  rewrite ^/(space|network)\.html$ /$1.php last;
  rewrite ^/([0-9]+)$ /space.php?uid=$1 last;

Database & 技术 17 Nov 2008 11:58 am

根据mysql id产生分级目录并导出

项目中的静态页根据信息表的id来自动分级目录,结构为每3位为一级。
如id=347234 就会先补全至9位->000347234再分级成/000/347/show_234.html。

程序中是用php来做的,目前需要导出一批地址数据,懒的写程序就直接用sql了。
SELECT id,CompanyName,CONCAT(’http://www.c1gstudio.com/’,left(lpad(id,9,0),3),’/',SUBSTR(lpad(id,9,0),4,3),’/show_’,right(lpad(id,9,0),3),’.html’) as url
FROM `t_reprint`
WHERE FromSite=’C1G军火库’ and `OperatorID`=’1′

在phpmyadmin 3.0.0中导出界面可能对中文支持不好,导致语句中断,不能导出
在远程创建用户,在本地phpmyadmin 2.8.2.4用远程用户导出,报substr函数未找到…(但在本地测试是可以的)

使用命令行导出
./mysql -hlocalhost -uroot -p
输入密码
use db;
SELECT id,CompanyName,CONCAT(’http://www.c1gstudio.com/’,left(lpad(id,9,0),3),’/',SUBSTR(lpad(id,9,0),4,3),’/show_’,right(lpad(id,9,0),3),’.html’) as url
INTO OUTFILE ‘./output.txt’
FROM `t_reprint`
WHERE FromSite=’C1G军火库’ and `OperatorID`=’1′ ;
 然后在mysql/var/下就可以找到output.txt

linux 维护优化 & 技术 10 Nov 2008 02:53 pm

用jailkit创建一个chroot环境的sftp

jailkit 官网
http://olivier.sessink.nl/jailkit/

环境as4
#wget http://olivier.sessink.nl/jailkit/jailkit-2.5.tar.gz
#tar zxvf jailkit-2.5.tar.gz
#cd jailkit-2.5
#./configure
#make
#make install

创建jail环境目录
#mkdir /home/jail
创建初始权限
#jk_init -v -j /home/jail basicshell editors extendedshell netutils ssh sftp scp
上面的斜体字都是可用的服务,可以在/etc/jailkit/jk_init.ini 中找到相应的部分
创建需限制的用户
#groupadd backup
#useradd -g backup -m john
#passwd john
限制该用户
#jk_jailuser -m -j /home/jail john

如果遇到错误
ldconfig: Can’t open configuration file /etc/ld.so.conf: No such file or directory
编辑/etc/jailkit/jk_init.ini
vi /etc/jailkit/jk_init.ini
#增加ldconfig
[ldconfig]
executables = /sbin/ldconfig
regularfiles = /etc/ld.so.conf

[uidbasics]
# this section probably needs adjustment on 64bit systems
# or non-Linux systems
# regularfiles = /etc/nsswitch.conf /etc/ld.so.conf
comment = common files for all jails that need user/group information
libraries = /lib/libnsl.so.1, /lib64/libnsl.so.1, /lib/libnss*.so.2, /lib64/libnss*.so.2
regularfiles = /etc/nsswitch.conf
#去掉/etc/ld.so.conf增加下面一行
includesections = ldconfig

修改完成后相应的passwd如下
#tail /etc/passwd
john:x:504:504::/home/jail/./home/john:/usr/sbin/jk_chrootsh

#cat /home/jail/etc/passwd
root:x:0:0:root:/root:/bin/bash
john:x:504:504::/home/john:/usr/sbin/jk_lsh

参考:
http://olivier.sessink.nl/jailkit/howtos_chroot_shell.html
http://bemike.org/2007/12/14/jailkit.html
http://forums.opensuse.org/applications/390698-jailkit-install-problems.html

linux 维护优化 & 技术 10 Nov 2008 01:17 pm

用scponly创建一个chroot环境的sftp

使用scponly可以使用户只能运行scp / sftp等命令,与rsync、subversion、gftp兼容,对winscp这个open source for Windows的client端支持很好.

scponly官网
http://sublimation.org/scponly/

服务器为as4
#wget http://nchc.dl.sourceforge.net/sourceforge/scponly/scponly-4.8.tgz
#tar zxvf scponly-4.8.tgz
#cd scponly-4.8
#./configure –prefix=/usr/local/scponly –enable-chrooted-binary –enable-winscp-compat –enable-sftp-logging-compat –enable-scp-compat –enable-rsync-compat –enable-passwd-compat
#make
#make install
#echo /usr/local/scponly/sbin/scponlyc >> /etc/shells
#make jail

/usr/bin/install -c -d /usr/local/scponly/bin
/usr/bin/install -c -d /usr/local/scponly/man/man8
/usr/bin/install -c -d /usr/local/scponly/etc/scponly
/usr/bin/install -c -o 0 -g 0 scponly /usr/local/scponly/bin/scponly
/usr/bin/install -c -o 0 -g 0 -m 0644 scponly.8 /usr/local/scponly/man/man8/scponly.8
/usr/bin/install -c -o 0 -g 0 -m 0644 debuglevel /usr/local/scponly/etc/scponly/debuglevel
if test “xscponlyc” != “x”; then                        \
        /usr/bin/install -c -d /usr/local/scponly/sbin;              \
        rm -f /usr/local/scponly/sbin/scponlyc;                 \
        cp scponly scponlyc;                            \
        /usr/bin/install -c -o 0 -g 0 -m 4755 scponlyc /usr/local/scponly/sbin/scponlyc;      \
fi
chmod u+x ./setup_chroot.sh
./setup_chroot.sh
 
Next we need to set the home directory for this scponly user.
please note that the user’s home directory MUST NOT be writeable
by the scponly user. this is important so that the scponly user
cannot subvert the .ssh configuration parameters.
 
for this reason, a writeable subdirectory will be created that
the scponly user can write into.
 
Username to install [scponly]larry
home directory you wish to set for this user [/home/larry]
name of the writeable subdirectory [incoming]incoming
ldconfig: /usr/lib/libmcrypt.so.4 is not a symbolic link
 
 
creating  /home/larry/incoming directory for uploading files
 
Your platform (Linux) does not have a platform specific setup script.
This install script will attempt a best guess.
If you perform customizations, please consider sending me your changes.
Look to the templates in build_extras/arch.
 - joe at sublimation dot org
 
please set the password for larry:
Changing password for user larry.
New UNIX password:
BAD PASSWORD: it is too simplistic/systematic
Retype new UNIX password:
Sorry, passwords do not match
New UNIX password:
BAD PASSWORD: it is too simplistic/systematic
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
if you experience a warning with winscp regarding groups, please install
the provided hacked out fake groups program into your chroot, like so:
cp groups /home/larry/bin/groups

#ll /home/larry/
drwxr-xr-x  2 root  root  4096 11月 10 11:23 bin
drwxr-xr-x  2 root  root  4096 11月 10 11:23 etc
drwxr-xr-x  2 larry larry 4096 11月 10 11:26 incoming
drwxr-xr-x  3 root  root  4096 11月 10 11:23 lib
drwxr-xr-x  5 root  root  4096 11月 10 11:23 usr

larry用户登录后只能在incoming目录里传东西

创建新用户需在编辑目录里执行setup_chroot.sh
#./setup_chroot.sh

#mkdir /home/larry/dev
#cp -a /dev/null /home/larry/dev/
64位系统
# mkdir /home/larry/lib64
# cp /lib64/ld-linux-x86-64.so.2 /home/larry/lib64/

参考:http://bbs.chinaunix.net/viewthread.php?tid=785820
http://hi.baidu.com/fengzhenjie/blog/item/2a4b1e7fe072ba0e29388a66.html

Web Server/Apache/Nginx & 技术 05 Nov 2008 05:11 pm

用squid缓存jsp加速lucene搜索

前面尝试了使用nginx负载均衡lucene,效果还不错,但更新维护比较麻烦。
搜索来源中大部分是由连接方式过来,所以大部分的页面内容相同,可以使用缓存的方式重复使用。

方案一:用nginx的proxy stone
方案二:用nginx的ncache
方案三:用Varnish
方案四:用squid

方案一和方案二:
方案一和二是副本概念不会自动更新缓存,需写脚本来控制
都要使用nginx 的rewrite将html转成jsp
修改jsp中分页等连接地址为html
方案二需修改jsp在header中增加max-age
尝试结果:
jsp的参数超过了10个,但nginx只支持10个,所以不能缓存所有页面,但可以尝试缓存最常用的关键词第一页。
linux上好像没法将文件缓存起来并且没log,以下是windows上error.log
——————————————————
2008/11/04 16:39:16 [crit] 2828#0: *3 rename() “/proxy_temp/0000000004″ to “html/locals.c1gstudio.com/search/” failed (21: Is a directory) while reading upstream, client: 127.0.0.1, server: locals.c1gstudio.com, request: “GET /search/ HTTP/1.1″, upstream: “http://192.168.1.50:8080/search/”, host: “locals.c1gstudio.com”
2008/11/04 16:39:19 [crit] 2828#0: *1 rename() “/proxy_temp/0000000013″ to “html/locals.c1gstudio.com/search/result.jsp?keyword=+%E7%BC%96%E8%BE%91&city=0&type=0&do=1″ failed (2: No such file or directory) while reading upstream, client: 127.0.0.1, server: locals.c1gstudio.com, request: “GET /search/result.jsp?keyword=+%E7%BC%96%E8%BE%91&city=0&jobtype=0&do=1 HTTP/1.1″, upstream: “http://192.168.1.50:8080/search/result.jsp?keyword=+%E7%BC%96%E8%BE%91&city=0&type=0&do=1″, host: “locals.c1gstudio.com”, referrer: http://locals.c1gstudio.com/search/
——————————————————-
貌似不必rewrite也可缓存。=_=!!!

方案三:
缓存放在内存里,软件重启后需重新生成,瞬时并发比较大
网卡流量也比较多,性能也比squid差。
参考it流言终结者的比较
IT流言终结者1续篇:varnish vs squid
IT流言终结者1:Varnish vs Squid
http://www.hiadmin.com/category/service/squid-app/

方案四:
以前有架设过,改改配置就可以上了。
选择squid2.6stable22,据测试性能稳定。

架设参考
squid 安装
http://blog.c1gstudio.com/archives/130

squid.conf中
开1.5G内存,4G硬盘
cache_store_log none
access_log none

refresh_pattern -i \.html$  60       25%     240
refresh_pattern -i \.htm$   60       25%     240
refresh_pattern -i \.jsp$   5       25%     20

refresh_pattern -i \.gif$   1440    50%     2880      ignore-reload
refresh_pattern -i \.jpg$   1440    50%     2880      ignore-reload
refresh_pattern -i \.jpeg$  1440    50%     2880     ignore-reload
refresh_pattern -i \.png$   1440    50%     2880      ignore-reload

总结:
最终架构是
nginx(80)->squid(81)->tomcat(8080)
nginx 跑在80端口代理81
squid 跑81端口代理远程的tomcat (squid跑在80会报access denied,忘改这个了acl Safe_ports port 81)
tomcat 在另一台机器上

jsp中header增加max-age=3600和相应expires,让页面在ie中缓存一小时,squid中缓存5~20分钟。

目前的负载
跑nginx和squid的 load average: 0.18, 0.14, 0.08 以前是load为1左右
跑tomcat的 load average: 1.57, 1.41, 1.28 以前load为3左右

现在改动程序只需改动一台机器,结果很满意哈~

 

LINUX & 其它 & 分析报告 & 技术 03 Nov 2008 05:27 pm

[转]iostat 介绍

2. iostat 结果解析

# iostat -x
Linux 2.4.21-9.30AX (localhost) 2004年07月14日

avg-cpu: %user %nice %sys %idle
3.85 0.00 0.95 95.20

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
/dev/hda 1.70 1.70 0.82 0.82 19.88 20.22 9.94 10.11 24.50 11.83 57.81 610.76 99.96
/dev/hda1 0.00 0.00 0.00 0.00 0.01 0.00 0.00 0.00 12.92 0.00 10.77 10.77 0.00
/dev/hda5 0.02 0.00 0.00 0.00 0.03 0.00 0.02 0.00 6.60 0.00 6.44 6.04 0.00
/dev/hda6 0.01 0.38 0.05 0.03 0.43 3.25 0.21 1.62 46.90 0.15 193.96 52.25 0.41
/dev/hda7 1.66 1.33 0.76 0.79 19.41 16.97 9.70 8.49 23.44 0.79 51.13 19.79 3.07

rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s: 每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s: 每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s 的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。即 delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。
即 delta(use)/s/1000 (因为use的单位为毫秒)

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。

svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),
svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多
也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及
I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await,说明
I/O 几乎没有等待时间;如果 await 远大于 svctm,说明 I/O 队列太长,应用
得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑
更换更快的磁盘,调整内核 elevator 算法,优化应用,或者升级 CPU。

队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标,但由于 avgqu-sz 是
按照单位时间的平均值,所以不能反映瞬间的 I/O 洪水。
3. I/O 系统 vs. 超市排队

举一个例子,我们在超市排队 checkout 时,怎么决定该去哪个交款台呢? 首当
是看排的队人数,5个人总比20人要快吧? 除了数人头,我们也常常看看前面人
购买的东西多少,如果前面有个采购了一星期食品的大妈,那么可以考虑换个队
排了。还有就是收银员的速度了,如果碰上了连钱都点不清楚的新手,那就有的
等了。另外,时机也很重要,可能 5 分钟前还人满为患的收款台,现在已是人
去楼空,这时候交款可是很爽啊,当然,前提是那过去的 5 分钟里所做的事情
比排队要有意义 (不过我还没发现什么事情比排队还无聊的)。

I/O 系统也和超市排队有很多类似之处:

r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例。

我们可以根据这些数据分析出 I/O 请求的模式,以及 I/O 的速度和响应时间。
4. 一个例子

# iostat -x 1
avg-cpu: %user %nice %sys %idle
16.24 0.00 4.31 79.44
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util

/dev/cciss/c0d0
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p1
0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29
/dev/cciss/c0d0p2
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00

 

上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作: delta(io)/s = r/s +
w/s = 1.02+27.55 = 28.57 (次/秒) 其中写操作占了主体 (w:r = 27:1)。

平均每次设备 I/O 操作只需要 5ms 就可以完成,但每个 I/O 请求却需要等上
78ms,为什么? 因为发出的 I/O 请求太多 (每秒钟约 29 个),假设这些请求是
同时发出的,那么平均等待时间可以这样计算:

平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + … + 请求总数-1) / 请求总数

应用到上面的例子: 平均等待时间 = 5ms * (1+2+…+28)/29 = 70ms,和
iostat 给出的 78ms 的平均等待时间很接近。这反过来表明 I/O 是同时发起的。

每秒发出的 I/O 请求很多 (约 29 个),平均队列却不长 (只有 2 个 左右),
这表明这 29 个请求的到来并不均匀,大部分时间 I/O 是空闲的。

一秒中有 14.29% 的时间 I/O 队列中是有请求的,也就是说,85.71% 的时间里
I/O 系统无事可做,所有 29 个 I/O 请求都在142毫秒之内处理掉了。

delta(ruse+wuse)/delta(io) = await = 78.21 => delta(ruse+wuse)/s =
78.21 * delta(io)/s = 78.21*28.57 = 2232.8,表明每秒内的I/O请求总共需
要等待2232.8ms。所以平均队列长度应为 2232.8ms/1000ms = 2.23,而 iostat
给出的平均队列长度 (avgqu-sz) 却为 22.35,为什么?! 因为 iostat 中有
bug,avgqu-sz 值应为 2.23,而不是 22.35。
以下为服务器情况

bbs(scsi 74G)
top - 17:06:00 up 61 days, 11 min,  3 users,  load average: 3.98, 3.72, 3.53
Tasks: 250 total,   3 running, 247 sleeping,   0 stopped,   0 zombie
Cpu(s): 15.4% us,  3.7% sy,  0.0% ni, 74.6% id,  6.2% wa,  0.1% hi,  0.0% si
Mem:   2073976k total,  1922724k used,   151252k free,    36372k buffers
Swap:  2040244k total,    46416k used,  1993828k free,  1007456k cached
 
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          15.17    0.00    3.65    6.21    0.00   75.02
 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.13    55.67   12.19   30.50   215.93   690.06    21.22     0.17    3.93   5.22  22.30
search1(sata 80G)
top - 17:06:32 up 4 days,  4:31,  2 users,  load average: 1.02, 1.31, 1.19
Tasks:  86 total,   1 running,  85 sleeping,   0 stopped,   0 zombie
Cpu(s): 32.3% us,  0.9% sy,  0.0% ni, 62.2% id,  4.2% wa,  0.2% hi,  0.2% si
Mem:   2074476k total,  2060532k used,    13944k free,   260740k buffers
Swap:  4096532k total,    16264k used,  4080268k free,   159984k cached
 
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9.00    0.00    1.62    5.80    0.00   84.02
 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
hda               0.05    35.22   18.19   12.87   189.80   384.73    18.50     5.59  179.86   7.44  23.12

search2(scsi 74G *2 )
top - 17:07:15 up 17 days, 21:34,  2 users,  load average: 2.21, 2.78, 2.82
Tasks: 155 total,   1 running, 154 sleeping,   0 stopped,   0 zombie
Cpu(s): 13.2% us,  4.7% sy,  0.0% ni, 77.7% id,  4.0% wa,  0.0% hi,  0.3% si
Mem:   2074936k total,  2003708k used,    71228k free,    74260k buffers
Swap:  2031608k total,   342032k used,  1689576k free,   197840k cached
 
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          21.67    0.00    6.25    4.39    0.00   67.94
 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.03     6.66    1.77    2.68    86.44    75.11    36.32     0.13   29.63   4.83   2.15
sdb               0.29    69.29   29.10   13.90   340.41   665.65    23.40     0.62   14.43   4.33  18.64

www (sas 15K 146G *2 raid 1)
top - 17:07:56 up 17 days, 20:33,  1 user,  load average: 0.16, 0.27, 0.26
Tasks: 161 total,   1 running, 160 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.1%us,  0.2%sy,  0.0%ni, 98.2%id,  0.4%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   8174384k total,  8113268k used,    61116k free,   277316k buffers
Swap:  8191992k total,      140k used,  8191852k free,  6900728k cached
 
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           2.00    0.00    0.79    0.22    0.00   97.09
 
Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.13    31.81    0.41    8.54    19.85   322.79    38.32     0.58   64.46   2.50   2.24
dm-0              0.00     0.00    0.01    3.92     0.40    31.39     8.08     0.19   47.19   1.44   0.57
dm-1              0.00     0.00    0.46   34.35    18.40   274.76     8.42     1.14   32.63   0.53   1.85
dm-2              0.00     0.00    0.00    0.23     0.00     1.82     8.00     0.01   31.41   8.79   0.20
dm-3              0.00     0.00    0.06    0.57     1.00     4.53     8.89     0.02   35.87   3.40   0.21
dm-4              0.00     0.00    0.00    0.00     0.01     0.02     8.00     0.00   15.83   0.35   0.00
dm-5              0.00     0.00    0.00    1.28     0.04    10.27     8.00     0.16  125.45   0.08   0.01

参考:http://blog.chinaunix.net/u/27493/showart.php?id=498055

Web Server/Apache/Nginx & 技术 30 Oct 2008 05:58 pm

Nginx for Windows

kevin写的nginx for windows 支持(Windows Vista, Windows XP, Windows 2000)
他的主页:
http://www.kevinworthington.com/nginx/win32/
目前有三个主流版本下载:

Branch Download Package Release Date
Development 0.7.19 13 October 2008
Stable 0.6.32 07 July 2008
Legacy 0.5.37 07 July 2008

tips:请不要用在生产环境,仅供开发测试。

一。下载
我这里下载0.6.32版http://www.kevinworthington.com/nginx/win32/nginx-0.6.32-win32-setup.exe
下载后安装到c:\nginx。

PHP 官方下载php
我这里下载PHP 5.2.6 zip package
下载后以解压到c:\php。

二。配置nginx
下面这张截图内容为廖老师 nginx 配置单:

上图中用红线椭圆圈起来的,是nginx php 配置的关键部分,没配置正确会出现404错误,让我郁闷很久。
如果你的程式放在有空格的文件夹下如program files下,可以用以下方法。
     include fcgi.conf;    
     set $rootpath “D:\Program Files\wamp\www”;
     fastcgi_param SCRIPT_FILENAME $rootpath$fastcgi_script_name;

三。启动nginx
执行c:\nginx\Start-nginx.bat启动
启动php的cgi server

关于php cgi server 可以使用以下命令:

      php-cgi.exe -b 127.0.0.1:9000 -q

这样做,缺陷是命令行窗口一直打开,若关闭那cgi server 也关闭啦。到网上下载RunHiddenConsole.exe 可以使命令行窗口隐藏啦。
       RunHiddenConsole.exe php-cgi.exe -b 127.0.0.1:9000 -q

你也可以写一个批处理来做这件事:

start_phpcgi.bat
 @ECHO OFF
ECHO Starting PHP FastCGI…
RunHiddenConsole.exe c:/php/php-cgi.exe -b 127.0.0.1:9000 -q
EXIT

关闭的批处理
stop_phpcgi.bat
@ECHO OFF
ECHO Stopping PHP FastCGI…
bin\process.exe -k php-cgi.exe >nul
ECHO.
EXIT

最后写一个简单PHPINFO来验证PHP 是否工作正常。

参考:http://blog.chinaitlab.com/html/30/104830-166195.html

linux 维护优化 & 技术 27 Oct 2008 05:56 pm

使用vnstat监控流量

vnstat通/proc来监控流量,无需root权限,提供每日、每月等报表,并有php前台扩展。
http://humdi.net/vnstat/

wget http://humdi.net/vnstat/vnstat-1.6.tar.gz
tar zxvf vnstat-1.6.tar.gz
cd vnstat-1.6
make && make install ; vnstat –testkernel && vnstat -u -i eth0

如果用户在一个64位平台上编译,应改用make 64bit命令.

添加crontab
crontab -e
0-55/5 * * * * if [ -x /usr/bin/vnstat ] && [ `ls/var/lib/vnstat/ | wc -l` -ge 1 ]; then /usr/bin/vnstat -u; fi

 vnStat 1.6 by Teemu Toivola

	 -q,  --query		 query database
	 -h,  --hours		 show hours
	 -d,  --days		 show days
	 -m,  --months		 show months
	 -w,  --weeks		 show weeks
	 -t,  --top10		 show top10
	 -s,  --short		 use short output
	 -u,  --update		 update database
	 -i,  --iface		 change interface (default: eth0)
	 -?,  --help		 short help
	 -v,  --version		 show version
	 -tr, --traffic		 calculate traffic
	 -l,  --live		 show transfer rate in real time

See also "--longhelp" for complete options list and "man vnstat".
$ vnstat
Database updated: Sun Dec  2 22:20:01 2007

	inet (eth0)

	   received:     735.00 GB (48.9%)
	transmitted:     769.38 GB (51.1%)
	      total:       1.47 TB

	                rx     |     tx     |  total
	-----------------------+------------+-----------
	yesterday     23.35 MB |   20.25 MB |   43.60 MB
	    today     27.47 MB |   21.37 MB |   48.84 MB
	-----------------------+------------+-----------
	estimated        29 MB |      22 MB |      51 MB
(with 2 interfaces)
$ vnstat

                     rx      /     tx      /    total    /  estimated
 Internet (eth1):
     yesterday    209.36 MB  /  322.88 MB  /  532.24 MB
         today      1.99 GB  /    2.46 GB  /    4.46 GB  /    4.67 GB

 Local (eth0):
     yesterday    248.27 MB  /    4.63 GB  /    4.87 GB
         today      2.31 GB  /    4.21 GB  /    6.52 GB  /    6.83 GB
$ vnstat -h
 inet (eth0)                                                              22:15
  ^                                                                 r
  |                                                                 rt r
  |                                                                 rt rt
  |                                                                 rt rt
  |                                                              r  rt rt
  |     rt                                                       r  rt rt
  |     rt                                                 rt    rt rt rt
  |  rt rt rt                                  r  r  rt r  rt r  rt rt rt
  |  rt rt rt                               r  rt rt rt rt rt rt rt rt rt
  |  rt rt rt rt r              r     r  r  r  rt rt rt rt rt rt rt rt rt rt
 -+--------------------------------------------------------------------------->
  |  23 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22    

 h   rx (kB)    tx (kB)      h   rx (kB)    tx (kB)      h   rx (kB)    tx (kB)
23      1,352      1,219    07        277        151    15      1,352      1,165
00      2,281      2,140    08        402        158    16      1,487        878
01      1,485      1,261    09        290        155    17      1,752      1,559
02        648        522    10        589        185    18      1,455      1,001
03        392        261    11        650        202    19      2,332      1,835
04        323        240    12        907        350    20      3,881      3,619
05        311        179    13      1,234      1,044    21      3,695      3,237
06        281        173    14      1,221        812    22        675        591
$ vnstat -d

 inet (eth0)  /  daily

    day         rx      |     tx      |  total
------------------------+-------------+----------------------------------------
   03.11.     26.57 MB  |   27.39 MB  |   53.97 MB   %%%%%%:::::::
   04.11.     22.23 MB  |   16.71 MB  |   38.94 MB   %%%%%::::
   05.11.     31.38 MB  |   23.35 MB  |   54.74 MB   %%%%%%%::::::
   06.11.     35.17 MB  |   26.85 MB  |   62.02 MB   %%%%%%%%%::::::
   07.11.     42.65 MB  |   34.19 MB  |   76.84 MB   %%%%%%%%%%%::::::::
   08.11.     36.65 MB  |   26.75 MB  |   63.40 MB   %%%%%%%%%::::::
   09.11.     35.01 MB  |   27.45 MB  |   62.47 MB   %%%%%%%%:::::::
   10.11.     24.48 MB  |   22.72 MB  |   47.20 MB   %%%%%%:::::
   11.11.     26.04 MB  |   19.91 MB  |   45.95 MB   %%%%%%:::::
   12.11.     27.89 MB  |   18.73 MB  |   46.61 MB   %%%%%%%::::
   13.11.     33.82 MB  |   24.52 MB  |   58.35 MB   %%%%%%%%::::::
   14.11.     39.11 MB  |   31.76 MB  |   70.86 MB   %%%%%%%%%::::::::
   15.11.     41.57 MB  |   36.23 MB  |   77.80 MB   %%%%%%%%%%:::::::::
   16.11.     36.93 MB  |   33.51 MB  |   70.44 MB   %%%%%%%%%::::::::
   17.11.     25.79 MB  |   23.87 MB  |   49.66 MB   %%%%%%::::::
   18.11.     29.51 MB  |   22.50 MB  |   52.01 MB   %%%%%%%::::::
   19.11.     43.46 MB  |   32.91 MB  |   76.38 MB   %%%%%%%%%%%::::::::
   20.11.     51.90 MB  |   47.82 MB  |   99.72 MB   %%%%%%%%%%%%%::::::::::::
   21.11.     38.77 MB  |   34.21 MB  |   72.98 MB   %%%%%%%%%%::::::::
   22.11.     34.54 MB  |   31.22 MB  |   65.76 MB   %%%%%%%%::::::::
   23.11.     22.61 MB  |   21.16 MB  |   43.76 MB   %%%%%:::::
   24.11.     22.49 MB  |   20.84 MB  |   43.34 MB   %%%%%:::::
   25.11.     31.60 MB  |   26.50 MB  |   58.10 MB   %%%%%%%%::::::
   26.11.     38.23 MB  |   33.84 MB  |   72.07 MB   %%%%%%%%%%::::::::
   27.11.     43.54 MB  |   41.88 MB  |   85.42 MB   %%%%%%%%%%%::::::::::
   28.11.     38.86 MB  |   30.87 MB  |   69.73 MB   %%%%%%%%%::::::::
   29.11.     40.16 MB  |   33.64 MB  |   73.79 MB   %%%%%%%%%%::::::::
   30.11.     32.73 MB  |   28.67 MB  |   61.40 MB   %%%%%%%%:::::::
   01.12.     23.35 MB  |   20.25 MB  |   43.60 MB   %%%%%:::::
   02.12.     27.27 MB  |   21.21 MB  |   48.47 MB   %%%%%%%:::::
------------------------+-------------+----------------------------------------
 estimated       29 MB  |      22 MB  |      51 MB
$ vnstat -m

 inet (eth0)  /  monthly

   month         rx      |      tx      |   total
-------------------------+--------------+--------------------------------------
  Jan '07       1.33 GB  |     1.25 GB  |     2.58 GB   %%%%%%%%%::::::::
  Feb '07       1.31 GB  |     1.51 GB  |     2.82 GB   %%%%%%%%%::::::::::
  Mar '07       1.54 GB  |     1.66 GB  |     3.20 GB   %%%%%%%%%%%:::::::::::
  Apr '07       1.27 GB  |     1.13 GB  |     2.40 GB   %%%%%%%%::::::::
  May '07       1.17 GB  |     1.31 GB  |     2.48 GB   %%%%%%%%:::::::::
  Jun '07     920.61 MB  |     2.00 GB  |     2.90 GB   %%%%%%:::::::::::::
  Jul '07     917.21 MB  |   763.12 MB  |     1.64 GB   %%%%%%:::::
  Aug '07     915.59 MB  |   905.99 MB  |     1.78 GB   %%%%%%::::::
  Sep '07     926.10 MB  |   678.70 MB  |     1.57 GB   %%%%%%::::
  Oct '07       1.00 GB  |   714.00 MB  |     1.69 GB   %%%%%%:::::
  Nov '07       0.99 GB  |   842.16 MB  |     1.81 GB   %%%%%%%:::::
  Dec '07      50.62 MB  |    41.46 MB  |    92.07 MB
-------------------------+--------------+--------------------------------------
estimated        808 MB  |      663 MB  |     1.44 GB
$ vnstat -t

 inet (eth0)  /  top 10

   #       day         rx      |     tx      |  total
-------------------------------+-------------+---------------------------------
   1    26.03.06      6.41 GB  |   10.83 GB  |   17.24 GB   %%%%%%%:::::::::::
   2    05.02.04      8.31 GB  |    7.08 GB  |   15.39 GB   %%%%%%%%%:::::::
   3    04.02.05      7.96 GB  |    6.21 GB  |   14.17 GB   %%%%%%%%::::::
   4    04.09.05      8.09 GB  |    5.22 GB  |   13.30 GB   %%%%%%%%:::::
   5    04.11.03      4.52 GB  |    5.96 GB  |   10.47 GB   %%%%::::::
   6    26.06.05      4.12 GB  |    6.10 GB  |   10.22 GB   %%%%::::::
   7    02.11.03      7.18 GB  |    2.79 GB  |    9.97 GB   %%%%%%%:::
   8    31.01.05      3.68 GB  |    5.99 GB  |    9.66 GB   %%%%::::::
   9    28.08.03      5.93 GB  |    3.69 GB  |    9.62 GB   %%%%%%::::
  10    23.12.03      4.36 GB  |    5.23 GB  |    9.59 GB   %%%%%:::::
-------------------------------+-------------+---------------------------------
$ vnstat -w

	Local (eth0)  /  weekly

	                    rx      |       tx      |    total
	----------------------------+---------------+--------------
	  last 7 days      4.83 GB  |     18.82 GB  |     23.65 GB
	    last week      2.52 GB  |     14.58 GB  |     17.10 GB
	 current week      2.31 GB  |      4.24 GB  |      6.55 GB
	----------------------------+---------------+--------------
	    estimated     17.66 GB  |     32.36 GB  |     50.02 GB
$ vnstat -tr
10386 packets sampled in 5 seconds
Traffic average for eth1

      rx         112.21 kB/s            620 packets/s
      tx        1444.77 kB/s           1456 packets/s
$ vnstat -l
Monitoring eth0...    (press CTRL-C to stop)

   rx:     430.68 kB/s   291 p/s            tx:      10.21 kB/s   147 p/s

 eth0  /  traffic statistics

                             rx       |       tx
--------------------------------------+----------------------------------------
  bytes                     32.79 MB  |        957 kB
--------------------------------------+----------------------------------------
          max            656.39 kB/s  |    90.50 kB/s
      average            419.78 kB/s  |    11.97 kB/s
          min            288.37 kB/s  |     7.03 kB/s
--------------------------------------+----------------------------------------
  packets                      23298  |         12348
--------------------------------------+----------------------------------------
          max                732 p/s  |       609 p/s
      average                291 p/s  |       154 p/s
          min                195 p/s  |       100 p/s
--------------------------------------+----------------------------------------
  time                  1.33 minutes

linux 维护优化 & 技术 27 Oct 2008 05:28 pm

使用iftop实时监控网卡流量

iftop是类似于top的实时流量监控工具,无报表功能,需使用root运行。
官方网站http://www.ex-parrot.com/~pdw/iftop/
目前最新版本为: iftop-0.17pre3.tar.gz
安装需要:
libpcap
http://www.tcpdump.org/
安装libpcap时出错
gcc -O2 -I.  -DHAVE_CONFIG_H  -D_U_=”__attribute__((unused))” -c ./fad-getad.c
In file included from ./fad-getad.c:64:
/usr/include/linux/if_packet.h:52: 错误:expected specifier-qualifier-list before ‘__u32’
make: *** [fad-getad.o] 错误 1


#include <linux/types.h>
加入到
/usr/include/linux/if_packet.h
make,make install,通过!

libcurses
界面:
v0.12 screenshot 

界面说明
第一行为带宽,这里为1Mbit,不是字节哦.
连接列表,最后三个分别是2秒,10秒和40秒的平均流量
=>代表发送,<= 代表接收
最后三行表示发送,接收和全部的流量,第二列为你运行iftop到目前流量,第三列为高峰值,第四列为平均值。

命令
iftop: display bandwidth usage on an interface by host
 
Synopsis: iftop -h | [-npbBP] [-i interface] [-f filter code] [-N net/mask]
 
   -h                  display this message
   -n                  don’t do hostname lookups(不进行dns解析)
   -N                  don’t convert port numbers to services (直接显示端口号,不显示服务名称)
   -p                  run in promiscuous mode (show traffic between other
                       hosts on the same network segment)(嗅探器)
   -b                  don’t display a bar graph of traffic
   -B                  Display bandwidth in bytes (以字节统计)
   -i interface        listen on named interface
   -f filter code      use filter code to select packets to count
                       (default: none, but only IP packets are counted)
   -F net/mask         show traffic flows in/out of network
   -P                  show ports as well as hosts(按照端口对应ip地址)
   -m limit            sets the upper limit for the bandwidth scale
   -c config file      specifies an alternative configuration file
 
iftop, version 0.17pre3
copyright (c) 2002 Paul Warren <pdw@ex-parrot.com> and contributors

安装
wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17pre3.tar.gz
tar zxvf iftop-0.17pre3.tar.gz
cd iftop-0.17pre3
./configure
make
make install
iftop

========================================================

              12.5Kb        25.0Kb        37.5Kb        50.0Kb  62.5Kb
mqqqqqqqqqqqqqvqqqqqqqqqqqqqvqqqqqqqqqqqqqvqqqqqqqqqqqqqvqqqqqqqqqqqqq
192.168.54.96         => 192.168.54.83         1.00Kb  1.86Kb  2.42Kb
                      <=                        160b    518b    485b
192.168.54.96         => 202.96.209.5             0b      0b     95b
                      <=                          0b      0b    168b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
TX:             cumm:  3.77KB   peak: rates:Kb 1.00Kb  1.86Kb  2.51Kb
RX:                     980B            1.31Kb  160b    518b    653b
TOTAL:                 4.73KB           7.10Kb 1.16Kb  2.36Kb  3.15Kb

Web Server/Apache/Nginx & 技术 27 Oct 2008 11:53 am

使用nginx负载均衡lucene

server a是之前退役的,现存放着一些小些php站点和lucene 搜索,
server a
cpu: Xeon(TM) CPU 2.80GHz (双核*2)
mem:1G*2
disk:scsi 74G *2 (raid 0)
os:as4
app:nginx+php+fcgi+xcache+mysql+tomcat+postfix

server b为刚退役,没有站点。
server b
cpu: Xeon(TM) CPU 2.80GHz (双核*2)
mem:1G*2
disk: sata 80G *1 (7200)
os:as4
app:nginx+tomcat

—————————————
server a 的搜索每天有几十万PV,平均load 5,更新索引达30,高峰时tomcat会挂掉。
产品结构:nginx代理tomcat,jsp提供搜索结果,jsp+mysql记录搜索关键字,crontab定时生成索引。

方案一:server a 提供生成索引和mysql服务,server b 提供纯web搜索服务,用rsync同步索引文件。
方案二:server a 提供生成索引和mysql服务,server b 和server a使用负载均衡一起提供需web搜索服务,用rsync同步索引文件。

一。先设置两台服务器时间是同步的。

Linux的时间设置与同步 (NTP)

二。设置rsync时不需要登录。
用server b 去拉server a的索引
使用crontab+ssh每天自动完全备份mysql数据

三。写更新的bash和设置crontab
rsync在第一次是全部同步,以后就是只更新有异动的文件。
目前索引为1G左右,
cache使用三级目录分布小文件,占4G

在server b上
vi rsync_index.sh
#!/bin/bash
#获取lucene索引
/usr/bin/rsync -avlR –delete -e /usr/bin/ssh rsync@221.0.0.1:/lucene/index / >> /opt/shell/rsync_index.log

vi rsync_cache.sh
#!/bin/bash
#获取职位的cache和关键词
/usr/bin/rsync -avlR –delete -e /usr/bin/ssh rsync@221.0.0.1:/lucene/keyword / >> /opt/shell/rsync_keyword.log
/usr/bin/rsync -avlR –delete -e /usr/bin/ssh rsync@221.0.0.1:/lucene/cache / >> /opt/shell/rsync_cache.log

crontab每小时更新一次。
50 * * * * /bin/sh /opt/shell/rsync_cache.sh > /dev/null 2>&1
52 * * * * /bin/sh /opt/shell/rsync_index.sh > /dev/null 2>&1

四。设置nginx
设置nginx的配置文件,使用方案一

      location / {
           proxy_pass http://127.0.0.1:8080;
       location ~* ^.+\.(jpg|jpeg|gif|png|css|js)$ {
    root /opt/tomcat/webapps/search;
    access_log   off;
    expires 3d;
    break;
       }
      }           

重启nginx,将域名指向server b.
server b平均load 为5,当rsync更新时load 会达到20,还是不可靠,使用方案二。

     upstream mysvr {
 #ip_hash; (据说可以以C类IP将用户固定在某台server,开启后并发大降不能肯定是否有bug)
 server 127.0.0.1:8080;
 server 221.0.0.1:8080;
     }

server {
      …..

      location / {
           #proxy_pass http://127.0.0.1:8080;
    proxy_pass http://mysvr;
       location ~* ^.+\.(jpg|jpeg|gif|png|css|js)$ {
    root /opt/tomcat/webapps/search;
    access_log   off;
    expires 3d;
    break;
       }
      }           

      …….

}

重启nginx,将域名指向server b.
server b 和server 平均load 为1~2,更新会到5,还可以接受。

Next Page »