mod_perl处理流程图一张~

22 May 2010 Posted in  web

http://www.fayland.org/journal上看到一张图,感觉很舒服很明白,转帖过来。
继续阅读……


strace进程跟踪排错一例

21 May 2010 Posted in  linux

在对HTTPS进行反向代理的时候,如果源站未能提供SSL的cert和key,可以采用TCP协议的端口转发完成。最常见的是iptables,还有rinetd。之前的博文中都有提到。
今天碰到一个事情,使用rinetd进行443转发的客户,全网都无法访问了……
proxy上对源站443端口能telnet通,绑定ie访问源站是没有问题;proxy的443端口本地也能telnet通,但是ie访问就是打不开任何页面。
偶然想起strace,觉得对rinetd进程进行跟踪试试。strace -p 13916,然后这边打开ie,输入https的域名,回车……
看到服务器tty上显示如下信息:
select(16, [4], [], NULL, NULL)         = 1 (in [4])
#rinetd程序处于select(),运行的FD为4
accept(4, {sa_family=AF_INET, sin_port=htons(3766), sin_addr=inet_addr(“211.99.216.18”)}, [16]) = 6
#从我本机的3766端口发起请求,被服务器接受,FD为6
ioctl(6, FIONBIO, [1])                  = 0
#设定该socket为阻塞状态
setsockopt(6, SOL_SOCKET, SO_LINGER, [0], 4) = -1 EINVAL (Invalid argument)
#设定其为异步处理方式,不错失败了……汗
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 7
#打开FD为7的socket,tcp传输方式为stream流方式
bind(7, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr(“0.0.0.0”)}, 16) = 0
#服务器打开对任一端口的监听
setsockopt(7, SOL_SOCKET, SO_LINGER, [0], 4) = -1 EINVAL (Invalid argument)
ioctl(7, FIONBIO, [1])                  = 0
#设定这个向源请求的socket为已阻塞
connect(7, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr(“222.73.34.25”)}, 16) = -1 EINPROGRESS (Operation now in progress)
#向222.73.34.25的443端口发送请求
select(16, [4 6 7], [], NULL, NULL)     = 1 (in [6])
recvfrom(6, “2631A1=31K36536423”217:352346225207N7qP’342!2008”…, 1024, 0, NULL, NULL) = 70
#从FD6即连接客户电脑的socket收到的内容
select(16, [4 6 7], [7], NULL, NULL)    = 2 (in [7], out [7])
recvfrom(7, 0x111e6860, 1024, 0, 0, 0)  = -1 EHOSTUNREACH (No route to host)
#从FD7即回源的socket收到的内容——“无法找到连接主机的路由”!!
close(7)                                = 0
#关闭FD7
select(16, [4 6], [6], NULL, NULL)      = 1 (out [6])
time(NULL)                              = 1274410006
stat(“/etc/localtime”, {st_mode=S_IFREG|0644, st_size=405, …}) = 0
close(6)                                = 0
#关闭FD6,这个是我关闭ie后关闭的。
很奇怪呀,这个222.73.34.25是什么地址?ping客户域名返回的明明不是这个ip呀?
试着kill rinetd,然后重启动rinetd服务。再重复如上操作。相关内容如下:
accept(4, {sa_family=AF_INET, sin_port=htons(3917), sin_addr=inet_addr(“211.99.216.18”)}, [16]) = 6
ioctl(6, FIONBIO, [1])                  = 0
setsockopt(6, SOL_SOCKET, SO_LINGER, [0], 4) = -1 EINVAL (Invalid argument)
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 7
bind(7, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr(“0.0.0.0”)}, 16) = 0
setsockopt(7, SOL_SOCKET, SO_LINGER, [0], 4) = -1 EINVAL (Invalid argument)
ioctl(7, FIONBIO, [1])                  = 0
connect(7, {sa_family=AF_INET, sin_port=htons(443), sin_addr=inet_addr(“219.235.4.17”)}, 16) = -1 EINPROGRESS (Operation now in progress)
#回源地址是219.235.4.17,这个正是ping出来的正确源ip!
select(18, [4 6 7], [], NULL, NULL)     = 1 (in [6])
recvfrom(6, “2631A1=31K365365f334370210367202260B33332E3337232423340s21”…, 1024, 0, NULL, NULL) = 70
select(18, [4 6 7], [7], NULL, NULL)    = 1 (out [7])
sendto(7, “2631A1=31K365365f334370210367202260B33332E3337232423340s21”…, 70, 0, NULL, 0) = 70
select(18, [4 6 7], [], NULL, NULL)     = 1 (in [7])
recvfrom(7, “2631r2432F31K365365U10200u236332*Mf316l2252306v254350364”…, 1024, 0, NULL, NULL) = 1024
select(18, [4 6], [6], NULL, NULL)      = 1 (out [6])
……
#这些recv和send就是页面请求的传输过程,ie上显示出来正确的页面了。
返回去查找之前的工单,也确认了222.73.34.25正是该客户之前的源站ip,而后改成219.235.4.17的。
由此看来rinetd虽然可以在conf里写域名,但其对域名的解析,只会在启动的时候执行一次,之后就一直持续对固定的那个ip进行转发了! 继续阅读……


url_rewrite配置的小区别

20 May 2010 Posted in  squid

一直以为squid的url_rewrite就是改写url后,传给squid分析是否缓存,然后返回缓存或者回源。在浏览器地址栏上的url是不变的。
今天才知道在print $uri的时候,可以给他加上http_code。变成print 302:$uri的格式,然后就可以由浏览器发起302跳转到新页面了。 继续阅读……


服务器登陆欢迎信息~

18 May 2010 Posted in  linux

上同事的测试机,发现登陆的时候在显示PS1前还显了一行’Welcome to Cloudex’的欢迎信息,蛮好玩的。
于是去百度一下,原来是设置/etc/issue和/etc/motd文件就可以了。打开/etc/issue,里面已经有两行centos5的信息,先加这里试试,保存退出,重新ssh上服务器,结果还是默认的:
Connecting to 192.168.0.1:22…
Connection established.
Escape character is ’^@]’.
Last login: Tue May 18 16:04:38 2010 from 192.168.1.1
[root@test ~]#
再仔细看看,似乎这个文件得restart后才能生效。
再去修改motd,退出重登陆。还是不行……这就怪了~~~
这事儿过身就忘了,直到今天,看/etc/ssh/sshd_config,正好看到里面有一条PrintMotd no,莫非就是这个!?赶紧改成PrintMotd yes,/etc/init.d/sshd restart;exit,重登陆。果然看到之前卸载motd里的欢迎信息了~
Last login: Tue May 18 16:04:38 2010 from 192.168.1.2
haha,I’m Raocl!
[root@sdl4 ~ 16:04:46]#
OK啦~~ 继续阅读……


(读书笔记)pushd/popd命令

14 May 2010 Posted in  linux

买了一本《linux操作系统之奥秘》,话说本人对海峡那边的书一向是抱有一定的认可的~
出于好奇,先翻看了第七章“系统性能”——也是最短的一章。其中提到CPU节能与性能的关联、管理和观察(这段拗口否~)
于是也上自己测试机去看cpufreq。结果发现/proc下没有相关路径,也就是说没用节能,然后又去找cpuspeed,在/etc/init.d/下找到了cpuspeed的启动脚本。不过启用是才发现有些模块在内核中没有编译,即使用modprobe也加载不上……
于是在init.d下瞎逛,看看系统shell脚本,算是学习吧~
还真看到一个新奇玩意儿了:pushd/popd命令。
在shell里操作的时候,经常在不同路径之间切换,最经常的办法:cd -;最简单的办法:上下键翻history;最安全的办法:啥都用全路径。
而pushd命令,则是创建一个堆栈,专门用来存储路径位置的。使用很简单,
pushd 路径1
就自动到了“路径1”下,同时把“路径1”从左向右压入堆栈;
等压完一堆以后,如何切换路径呢?
堆栈从左到右(或者说成从下向上?)分别是num 0,1,2……
要切换到第几个路径,pushd +n即可——注意此时pushd自动把该路径变成last了。
然后还有popd命令,从堆栈中弹出路径,这个命令可以不接options,默认从last弹出(堆栈的LIFO原则);也可以和pushd一样用+n的方式指定弹出哪个;比较搞怪的是,如果在popd后面随便跟一个路径,不管这个路径是不是堆栈中存在的,popd都会从右边把first路径弹出……汗~~ 继续阅读……


关闭snmp和nrpe的syslog正常输出

11 May 2010 Posted in  linux

默认安装启动的snmp,会把日志记录在系统日志/var/log/messages里。 继续阅读……


perl脚本性能优化(续)

11 May 2010 Posted in  perl

上回提到,性能优化的四个回答,今天在扶凯的博客里看到一篇文章,刚好是同样情况下的流程优化。按照其中的说法,修改测试,果然改进很大: 继续阅读……


perl边学边练(purge脚本进阶)

07 May 2010 Posted in  CDN

之前的purge脚本usage是./purge.pl “url1” “url2”。如果url变成成百上千个那么多的时候,这样就不行了。也需要在脚本中处理成文件句柄。修改如下:
```perl
#!/usr/bin/perl -w
use IO::Socket;
unless (@ARGV == 2) { die “usage: $0 ip.list url.list” }
open(HOST,”<$ARGV[0]”)||die “cannot open the ip list”;
open(URL,”<$ARGV[1]”)||die “cannot open the url list”;
$EOL = “15121512”; 继续阅读……


用Devel::NYTProf模块排查优化perl脚本性能

07 May 2010 Posted in  perl

缓存服务器上有一个perl写的日志分析脚本,记录所有不重复的url。之后对squid进行目录刷新时,从记录下来的文件中查找匹配的url即可。 继续阅读……


web服务监控小工具httping

06 May 2010 Posted in  monitor

今天偶然看到这个工具,感觉挺有用的,记录一下。
安装过程很简单: 继续阅读……


netperf网络测试

05 May 2010 Posted in  linux

本文的主要参考是IBM工作室的一篇文章:http://www.ibm.com/developerworks/cn/linux/l-netperf/index.html 继续阅读……


系统消息队列(squid启动小故障)

30 Apr 2010 Posted in  linux

昨天公司一台服务器被机房动手动脚之后,上面的虚拟机变得极不正常。squid基本跑不了三四个小时就out of memory一次。虽然已经把cache_mem调低到free的1/4了。依然如此。
更过分的事情刚才发生了,在又一次挂掉后,squid重启动彻底失败起不来了。
赶紧查看cache.log,其中记载了失败的原因,如下: 继续阅读……


awk取数值小技巧

29 Apr 2010 Posted in  bash

今天在Q群里看到有人在取ping值时用的小技巧,很是不错,加深了对awk的理解。
ping命令输出如下: 继续阅读……


at命令

26 Apr 2010 Posted in  bash

经常使用crontab做定时任务。不过偶然碰到只需要半夜执行一次就够了的时候,还用crontab的话,第二天还得记得上去删除掉任务。就比较麻烦了——尤其是我记忆力不太好~~
好在发现了at命令: 继续阅读……


shell并发脚本学习

25 Apr 2010 Posted in  bash

在CU上看到的老帖子,创建并发程序的shell。个人觉得非常经典,贴回来好好学习使用。用()包围的是我写的学习笔记,#的是原帖注释: 继续阅读……


起点小说网的cdn分析~(绝非正式报告)

23 Apr 2010 Posted in  CDN

每天习惯了在起点小说网看看小说轻松一下神经,今天一不小心,看见了squid错误页面。于是小小的查看了一下起点的cdn状况。
首先声明本身的接入情况:宽带通4M接入,ip138显示为北京网通adsl……
访问的是决战朝鲜的第三十三章。页面内容来看,域名主要有www.qidian.com、image.cmfu.com、ipagent.igalive.com、cj.qidian.com四个,前两个在网宿加速(lxdns)、第三个在蓝汛加速(ccgslb)、第四个在起点母公司盛大加速(sdo),其余零散域名未加速。
lxdns返回的ip是天津网通(ping值7ms);
ccgslb返回的ip是北京蓝汛(ping值8ms);
sdo返回的是上海联通(本地ping不通,在沈阳网通测试机上居然ping通了,返回的是同一个ip,30ms,汗)……
整个页面一共81个对象:
加速的域名uedas.qidian.com和sdo的cj.qidian.com下的对象,time都在100ms以上;
网宿加速域名下的对象,主要是小图片和页面;
图片小到以B计算,返回time在16ms左右;页面包括aspx和html,html大小在15-20KB左右,返回time在50ms左右;
耗时最大的是主页面http://www.qidian.com/BookReader/1501306,27478560.aspx,耗时437ms,其中15ms建立链接,而422ms传输内容,content-length 69408,请求头带有no-cache的cache-control和gzip,deflate的压缩;返回头带有Age 1的HIT结果,但X-Cache有两层,分别是一层MISS一层HIT,via头信息是jsyz232:80 (Cdn Cache Server V2.0), tg146:80 (Cdn Cache Server V2.0)。预计应该是parent上设定强制缓存,而leaf上不缓存;
另一个耗时较大的是http://www.qidian.com/Javascript/ReadChapterNew.js?t=091216,耗时250ms,content-length 35423,其他情况和aspx差不多,不过返回了三个X-Cache,一个MISS两个HIT,在via头上很奇怪的看到三个服务器分别是jsyz232:80 (Cdn Cache Server V2.0), zb99:80 (Cdn Cache Server V2.0), tg134:8103 (Cdn Cache Server V2.0),不知道这个开8103端口的是什么意思??(网上查了一下,民生网银用的是这个端口,~~)
最后是蓝汛加速域名下的对象,都是广告;
js文件url是相同的,都是http://ipagent.igalive.com/show_ads.js,但先后请求了5次,返回时间依次为:4.28s、48.42s、3.14s、6.17s和875ms,波动相当大!观察这5次的Age,分别是778、827、782、834、835;对应返回时间,可以看出是同一台服务器返回的同一份缓存。再具体看time的细分,建立连接时间都很短,传输内容时间从500ms到1.5s不等。也就是说,主要波动在于服务器的响应时间上。
aspx?文件,url比较长,类似这种:http://ipagent.igalive.com/s.aspx?adid=100144&host=http://ipagent.igalive.com&dt=1272030174514&lmt=1272028966&output=101&url=http://www.qidian.com/BookReader/1501306/27478560.aspx&ref=http://me.qidian.com/BookCase/1/1&flash=10&u_h=660&u_w=1126&u_ah=627&u_aw=1126&u_cd=24&u_tz=480&u_his=1&u_nplug=7&u_nmime=16,都是MISS回源的。长度和上面的js差不多都在40KB左右。但是到最后甚至有一个文件连接超时了……</ 继续阅读……


perl内置变量

22 Apr 2010 Posted in  perl

$_ 默认输入/模式搜索空间,常用于-f -d测试、print unlink函数、m// s/// tr///匹配、foreach while循环 继续阅读……


要命的刷新

22 Apr 2010 Posted in  CDN

今天一天都在跟刷新做斗争。
先是squid的目录刷新,用/home/squid/bin/squidclient -p 80 mgr:objects|awk ‘/harbin/{system(“/home/squid/bin/squidclient -p 80 -m purge “$2}’刷新一遍;客户反馈看到的依然是旧页面;我想想似乎看到url里有带()的,awk的system函数这时候会出错;于是改成用for i in /home/squid/bin/squidclient -p 80 mgr:objects|awk '/harbin/{print $2}';do /home/squid/bin/squidclient -p 80 -m purge “$i”;done再刷新一遍;然后自己绑定节点访问,居然也还看到是旧页面! 继续阅读……


sscanf用法

20 Apr 2010 Posted in  C

int sscanf( 继续阅读……


iscsi试验(读写测试)

15 Apr 2010 Posted in  linux

隔了一天,回头再来mount /dev/sda /mnt;成功了~
不信邪,再上一台,login,mount,继续成功……
难道是前天rp不行? 继续阅读……


apache防盗链(modperl试用)

15 Apr 2010 Posted in  web

客户需求如下: 继续阅读……


iscsi试验(失败,慎入)

12 Apr 2010 Posted in  linux

聊天时听同事提及iscsi。回来后借助百度和谷歌大概了解了一下是网络存储,就赶紧下了软件包作测试。
bash wget http://downloads.sourceforge.net/project/iscsitarget/iscsitarget/1.4.19/iscsitarget-1.4.19.tar.gz tar zxvf iscsitarget-1.4.19.tar.gz cd iscsitarget-1.4.19 make && make install
就完成了服务器端的安装,然后修改配置文件/etc/iet/ietd.conf,方便起见,就写最基本的三行: 继续阅读……


客户页面小故障

10 Apr 2010 Posted in  CDN

今天接到客户电话,说,主页已经提交过了刷新任务,上面的图片已经更新,但点击图片后链接到的页面内容还是老的……
仔细一看,原来主页里的html是这么定义的:
html <a href="http://msn.golfbox.cn/cache/922/36717.html" target="_blank"><img src="/upload/img/20100410/20100410144202.jpg" width="125" height="80" class="border_blue" /></a>
而http://msn.golfbox.cn/cache/922/36717.html的内容是这样:
```html 继续阅读……


url_rewrite_concurrency

08 Apr 2010 Posted in  squid

squid的重定向,我看网上一般都采用 redirect_children (即 url_rewrite_children)。估计是因为中文权威指南的原因吧。不过中文权威指南还是2.5版的时候出的。有些新东西没有。比如 squid.conf.default 中提供的另一种 url_rewrite_concurrency继续阅读……


date的一个怪问题

03 Apr 2010 Posted in  bash

今天看同事的一个备份脚本,在取昨天的日期时,采用了YESTERDAY_NAME=date -I -d'-1 day' +"%Y-%m-%d"的方法。 继续阅读……