November 2007 Archives

linux的TCP状态里各种WAIT的含义

| No Comments | No TrackBacks

netstat -ant 显示的连接状态有几种WAIT: FIN_WAIT_1,FIN_WAIT_2,CLOSE_WAIT和TIME_WAIT. 他们的含义要从TCP的连接中断过程说起

Server              Client
  -------- FIN -------->
  <------- ACK ---------
  <------- FIN ---------
  -------- ACK -------->

对于服务器主动关闭连接(Active Close):

  1. 服务器首先向客户机发送FIN包,然后服务器进入FIN_WAIT_1状态。
  2. 客户机向服务器确认FIN包收到,向服务器发送FIN/ACK,客户机进入CLOSE_WAIT状态。
  3. 服务器收到来自客户机的FIN/ACK后,进入FIN_WAIT_2状态
  4. 现在客户机进入被动关闭("passive close")状态,客户机OS等待他上面的应用程序关闭连接。一旦连接被关
    闭,客户端会发送FIN包到服务器
  5. 当服务器收到FIN包后,服务器会向客户机发送FIN/ACK确认,然后进入著名的TIME_WAIT状态
  6. 由于在连接关闭后,还不能确定所有连接关闭前的包都被服务器接受到了(包的接受是没有先后顺序的),因此有了TIME_WAIT状态。在这个状态中,服务器仍然在等待客户机发送的但是还未到达服务器的包。这个状态dl.
  7. 将保持2*MSL的时间,这里的MSL指的是一个TCP包在网络中存在的最长时间。一般情况下2*MSL=240秒。

自动调用sudo的shell函数

| No Comments | No TrackBacks

很多脚本需要以root来,因此当当前用户不是root的时候可以提示并引导用户获得root权限再执行。至少比看到一对Permission Denied要有好一些。(当然是引导那些有sudo priviledge的用户去sudo咯)

自动调用sudo的shell函数:

invoke_sudo() 
{ 
    if [ "`id -u`" != "`id -u $1`" ]; then 
        echo "`whoami`: you need $1 priviledge to run this application." 
        if [ "$AUTO_INVOKE_SUDO" == "yes" ]; then 
            echo "Invkoing sudo ..." 
            sudo -u "#`id -u $1`" bash -c "$2" 
        fi 
        exit 0 
    fi 
}

使用方法是

invoke_sudo root "$0 $@"

[QUOTE]subversion仓库的迁移

| No Comments | No TrackBacks

原文地址:http://eastviking.javaeye.com/blog/32899

SVN迁移可能有很多原因, 可能是我们想换Repository目录, 或者是想换一台机器, 等等.
SVN迁移很容易做, 按照下面步骤就可以:

  1. 将原来的Repository导出为一个文件dumpfile > svnadmin dump path/to/old-repo > dumpfile
  2. 创建新的Repository, 创建方法可以参考 Windows 平台安装Subversion server
  3. 将dumpfile导入到新的Repository > svnadmin load path/to/new-repo < dumpfile
  4. 检查新的Repository的conf/目录下的配置文件, 检查hooks/目录下的构子程序等等...

Apache优化之KeepAlive

| No Comments | No TrackBacks

KeepAlive功能是在HTTP/1.1协议中要求实现的,用来保持客户机和服务器的长连接,执子之手与子偕老。通过减少建立TCP Session的次数来提高性能。常用的配置参数有{KeepAlive, KeepAliveTimeout, MaxKeepAliveRequests}。逐个说来:KeepAlive决定是否开启KeepAlive支持(On/Off);KeepAliveTimeout决定一个KeepAlive的连接的无请求状态最长保持的时间(以秒为单位), 时间一到就shutdown连接,若之后又有数据传输则必须再建立新的连接了;MaxKeepAliveRequests于 KeepAliveTimeout相似,意思是服务多少个请求就shutdown连接。看个例子:

KeepAlive On
KeepAliveTimeout 5

意思是说,打开KeepAlive,每个连接只保持5秒就中断。

对于KeepAlive的配置需要慎重,错误的参数可能导致严重的性能问题。一个高负载的Server,如果建立很多长连接将无法继续服务新的连接。因此需要根据server的性质调整KeepAliveTimeout或是MaxKeepAliveRequests的值。

例如:你的网页上有三幅图画2个外部javascript,他们都存放在你自己的server上。因此将MaxKeepAliveRequests设置为7比较合适。3幅图 2个js各一个link,网页本身一个link,还有firefox传说中的favicon.ico。当然还是要有KeepAliveTimeout的。如果客户机用了该死的IE并且设置了某个该死的选项,IE是不会向服务器发送HEAD请求查看图片(或是其他资源)是否过期的,而是直接使用本地图片。这个时候服务器是不会计算Request的(因为压根就没有Request嘛)。再如果只有MaxKeepAliveRequests参数,服务器会默认等待5秒才结束KeepAlive连接。通常这5秒可能玩死一个高负载的服务器。因此打开Firefox,启动Firebug,看看你的站究竟需要多少次请求,再决定KeepAlive吧。

Fusion-Icon On Ubuntu 7.10

| No Comments | No TrackBacks

Fusion-Icon是一个Compiz Fusion的TrayIcon。支持Theme Select, WM Reload等功能,使用起来十分方便。
在Ubuntu 7.10下的安装方法:

git clone git://anongit.opencompositing.org/users/crdlb/fusion-icon
cd fusion-icon
sudo make interface=gtk install

然后在gnome的session里加入/usr/bin/fusion-icon, 如果使用ubuntu来启动compiz的话,就要在启动fusion-icon的时候加入参数-n,即 /usr/bin/fusion-icon -n

pkill & pgrep

| No Comments | No TrackBacks

pkill & pgrep 是两个很方便的命令。省去了要先ps auwx | grep xxxx然后再根据pid kill的麻烦。例如,杀掉所有叫做wiki-import.pl的脚本

pkill -f wiki-import.pl

默认情况下,pkill & pgrep只会匹配启动程序的文件名。加上 -f 参数可以让pkill & pgrep 匹配整个命令行。比如,上面的例子就是为了匹配到"perl wiki-import.pl".

pkill和kill一样可以向进程发送多种信号。例如:

pkill -STOP wiki-import.pl #暂停进程
pkill -CONT wiki-import.pl #唤醒进程

October 2008

Sun Mon Tue Wed Thu Fri Sat
      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  

Friends' Links

Recent Comments

  • jianingy: test read more
  • mmx: thank u very much ! read more
  • FW: pls contact me with email.about APIHook. read more
  • jianingy: 这个lc是啥意思? -------- read more
  • cnhackTNT: 晕,被过滤掉了,再试试: s/(?<!\\)\$NICK/lc/e; 汗,过滤了小于符号,只好写<了呵呵 read more
  • cnhackTNT: s/(? 这样可以少打几个字呵呵 read more
  • R.Q.: 酱紫哦,了了 -------- read more

Archives

Powered by Movable Type 4.21-en