首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

pcap包处理程序的一次改善

2012-11-18 
pcap包处理程序的一次改进?? 最近某同学的有个程序跑得好慢,疑似有点问题。程序的核心是读取pcap数据包,然

pcap包处理程序的一次改进

?? 最近某同学的有个程序跑得好慢,疑似有点问题。程序的核心是读取pcap数据包,然后白名单过滤插入数据库。在实际使用中发现每秒插入数据库条数在1000条每秒左右,而且是在占用了30个左右的数据库连接情况下,效率有点低。

???? 刚开始我以为是数据库插入部分写得有点问题,这里采用的是逐条insert的方式,我经过查阅资料选择了改进为

insert all into test(a,b,c) values ('a1','a','a')           into test(a,b,c) values ('a2','a','a')           into test(a,b,c) values ('a3','a','a')           into test(a,b,c) values ('a4','a','a')           into test(a,b,c) values ('a5','a','a')           select * from dual

?

这样子的插入,从理论上来说应该是有较大提高的。

???????

?????? 但是实际中发现速度提升很不明显,我就往前面看,发现白名单过滤这里采用了正则表达式,这是比较耗资源的一个行为,他首先采用了正则表达式来去匹配这是否是个正规的域名,这里我觉得没什么必要删掉了,其次他大量采用了临界区去锁这个资源,我表示理解不能。。。删掉

?

?

???? 然后发现效率有小量提升,但不是特别明显,继续研究。

?

??? 然后到了程序的起始

写道pcap_loop(fp,0,packet_handler,NULL);
pcap_close(fp);

?位置

?这里在packet_handler发现了问题,他把对包的解析功能写在了里面,这是比较复杂的一个过程,合理的方式应该是在这里只做一件事,把包放到队列里,然后结束,另外开多线程去处理包。

?? 问题定位到。ok

热点排行