System Administration: November 2007 Archives
netstat -ant 显示的连接状态有几种WAIT: FIN_WAIT_1,FIN_WAIT_2,CLOSE_WAIT和TIME_WAIT. 他们的含义要从TCP的连接中断过程说起
Server Client
-------- FIN -------->
<------- ACK ---------
<------- FIN ---------
-------- ACK -------->
对于服务器主动关闭连接(Active Close):
- 服务器首先向客户机发送FIN包,然后服务器进入FIN_WAIT_1状态。
- 客户机向服务器确认FIN包收到,向服务器发送FIN/ACK,客户机进入CLOSE_WAIT状态。
- 服务器收到来自客户机的FIN/ACK后,进入FIN_WAIT_2状态
- 现在客户机进入被动关闭("passive close")状态,客户机OS等待他上面的应用程序关闭连接。一旦连接被关
闭,客户端会发送FIN包到服务器 - 当服务器收到FIN包后,服务器会向客户机发送FIN/ACK确认,然后进入著名的TIME_WAIT状态
- 由于在连接关闭后,还不能确定所有连接关闭前的包都被服务器接受到了(包的接受是没有先后顺序的),因此有了TIME_WAIT状态。在这个状态中,服务器仍然在等待客户机发送的但是还未到达服务器的包。这个状态dl.
- 将保持2*MSL的时间,这里的MSL指的是一个TCP包在网络中存在的最长时间。一般情况下2*MSL=240秒。
很多脚本需要以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 $@"
原文地址:http://eastviking.javaeye.com/blog/32899
SVN迁移可能有很多原因, 可能是我们想换Repository目录, 或者是想换一台机器, 等等.
SVN迁移很容易做, 按照下面步骤就可以:
- 将原来的Repository导出为一个文件dumpfile > svnadmin dump path/to/old-repo > dumpfile
- 创建新的Repository, 创建方法可以参考 Windows 平台安装Subversion server
- 将dumpfile导入到新的Repository > svnadmin load path/to/new-repo < dumpfile
- 检查新的Repository的conf/目录下的配置文件, 检查hooks/目录下的构子程序等等...
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吧。
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 #唤醒进程
Recent Comments
FW on 【转】rxvt-unicode (urxvt) 字间距过宽的patch: pls contac
jianingy on 用正则表达式Look-Ahead做带逃逸的变量替换: 这个lc是啥意思?
cnhackTNT on 用正则表达式Look-Ahead做带逃逸的变量替换: 晕,被过滤掉了,再试
cnhackTNT on 用正则表达式Look-Ahead做带逃逸的变量替换: s/(? 这样可以
R.Q. on 个性化SSH登录: 酱紫哦,了了 ---