Archive for 九月, 2009

一次错误

在千橡注册过程中,我很老实的点了一个下一步,然后服务器就抛出线程异常了。

我运气这么好?
千橡错误

redhat网站查到下面的信息,说是因为内存不够的原因。我觉得这个可以当作出现这个问题的解释,但是却解释得不够“完美”,我仍旧还在疑惑中:如果是是因为内存不够的原因,那么在每次测试之前,只要保证机器状态一样,那么TCP: time wait bucket table overflow这条信息的输出次数就应该是一样的,或者差的不是很多,因为每次有一个socket来了,就给一个数据结构,直到内存用完输出TCP: time wait bucket table overflow信息,但是我测试的结果是差异不小,这就让我感觉疑惑了,莫非每次分配的数据结构不一样大?这不可能。我每次单独测试都是重启开发板,然后不运行任何其他程序就进行测试的,这样应该可以保证每次测试机器的状态不是差的很多吧。

The “TCP: time wait bucket table overflow” message shows when the kernel is unable to allocate a data structure to put a socket in the TIME_WAIT state.

This is happening according to linux/net/ipv4/tcp_minisocks.c:

if (tcp_tw_count < sysctl_tcp_max_tw_buckets)
tw = kmem_cache_alloc(tcp_timewait_cachep, SLAB_ATOMIC);

if(tw != NULL) {
(..)
} else {
/* Sorry, if we’re out of memory, just CLOSE this
* socket up. We’ve got bigger problems than
* non-graceful socket closings.
*/
if (net_ratelimit())
printk(KERN_INFO “TCP: time wait bucket table overflow\\n”);
}

This problem is more likely to happen on systems creating a lot of TCP connections at a fast pace. RFC 793 decided that those sockets should stay in the TIME_WAIT state for 2*MSL (Maximum Segment Life), but the Linux implementation seems to make the TIME_WAIT state last for 1 minute.

Monitor the resources used by those time wait buckets by watching:

# cat /proc/slabinfo | grep tcp_tw_bucket

The size of the time wait bucket can be adjusted by writing to /proc/sys/net/ipv4/tcp_max_tw_buckets. However, the link between the client and the server cannot cause packets to arrive out of order, then the TIME_WAIT state can be skipped and sockets can be recycled immediately. Socket recycling can be configured in /proc/sys/net/ipv4/tcp_tw_recycle, but check with your network administrator to verify whether it’s safe to do so.

服务器性能

时间好快啊,一眨眼就晚上11点过了。赶紧写今天的日记。

今天写了一个超级超级简陋的web服务器,采用epoll多线程的方式:主线程负责accpet,子线程处理链接。问题出在测试环节:

在笔记本上用ab模拟50个并发连接,10000次请求,进行测试,一切OK。可是移植到mini2440开发板上去运行,测试参数不变,就出现这样的输出(截取一部分)
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow
__ratelimit: 1745 callbacks suppressed
TCP: time wait bucket table overflow
TCP: time wait bucket table overflow

我第一反应是服务器连接队列太小,我立刻改大了再测试,还是有问题。我又找了一个别人写的单进程服务器移植到mini2440开发板上来测试,一样有这样的输出。但是这些服务器在笔记本上测试都没有这种问题,很明显是硬件处理能力跟不上的原因。

索性用开发板上自带的boa服务器来测试,靠,问题更加严重,出现好多好多这样的输出。

不解。回头一定要搞明白这个问题。

性能测试结果对比如下,都是在mini2440开发板上进行测试:

1.epoll+pthread服务器,处理10000次请求总共耗时22.341秒,平均每秒处理447.61个请求,测试结果性能最好
2.单进程服务器,处理10000次请求总共耗时28.922秒,平均每秒处理个345.75请求,测试结果性能最差
3.mini2440系统里面自带的boa服务器,处理10000次请求总共耗时26.739秒,平均每秒处理个373.98个请求,测试性能第二

从结果来看多线程方式比单进程的处理方式要好一点,估计boa性能略差的原因是因为boa比较完善,支持动态网页。而另外两个都只支持静态页面。不过这样分析也不对,因为测试时我没有让他们输出任何内容,仅仅是一个报文头而已。所以其实这三个服务器的测试基础是一样的。后面完善了服务器之后再测试一下。

笑话一则

今天看到一则笑话:《读博士与拉大便的相同点》

1.都是憋出来的
2.肚子里有货才爽
3.即便肚子里面有货 也得有paper才行
4.paper越多心里越踏实
5.paper上的都是屎
6.paper不能是别人用过的
7.paper虽然是别人用过的 但是只要看不出来也可将就
8.运气够好的话可以借到paper
9.没有paper的话 如果你很有钱也能解决问题
10.实在没有paper 直接拍拍屁股走人是很需要勇气的

呵呵,入木三分啊。

中国高等教育就是一个笑话。

最近身边不少同学都在忙碌考研、保研的事情,让我感到惊讶的是不少导师在宣传自己的时候不是以自己的才能或经验来吸引学生,对外的宣传竟然是自己今年有多少个项目,经费如何如何的充足。。。可笑至极!联想到一个事情,一个德国的科学家来中国游学,每到一个研究所参观学习的时候,发现中国人总是喜欢炫耀自己有多少多少先进设备,这个德国人非常反感,因为他们从来不比中国的科研设备差,他关注的是你们中国人用这些设备研究出了什么样的成果。

什么样的思想观念能培养决定培养出什么样的人才。

若干年后,我们可以又一次骄傲地向世界宣布,我们的硕士人数是全球第一,人口素质得到极大提高。

阳光归来

下午天晴了,持续两天的雨总算停下来。这两天一直宅在宿舍,身体感觉特别难受,我非常肯定我需要运动。

持续两天的雨总算停下来。

这两天一直宅在宿舍,身体感觉特别难受,我非常肯定我需要运动。

当我看到塑胶跑道上的积水反射的阳光时,感觉很恍惚。

P1 穿透

IMG_3135

P2 恍惚

IMG_3140