Ntop性能提升方案

Ntop性能提升方案

Ntop是一款Linux下常见的开源监控软件,它可以监测的数据包括:网络流量、使用协议、系统负载、端口情况、数据包发送时间等。正常情况下它工作的时候就像一部被动声纳,默默的接收看来自网络的各种信息,通过对这些数据的分析,网络管理员可以深入了解网络当前的运行状况,不过一旦超过Ntop数据包的处理能力,Ntop随即出现性能问题,从而导致Ntop无法准确分析网络流量和各种数据,对网络管理造成影响。下文介绍了一种提高Ntop性能的方法。

通常Ntop的抓包分析功能,是通过Ntop自己完成,但它们都是通过libpcap来实现抓包,且速度不能超过100M,分析一下libpcap的流程我们明白,首先数据包通过路径为网卡硬中断→软中断→内核协议栈→系统调用→socket→->libpcap接口→用户应用程序,在这个流程中,可以看出数据的copy比较多,所以在高速率下libpcap 抓包丢包严重也不用感到奇怪了。

对于千兆的网络就需要采用PF_RING技术来接受数据包了,PF_Ring运行于Linux的内核层,体系结构图如下图所示,它采用类类似零拷贝技术,而且PF_Ring从网卡获取的数据的速度比libpcap有成倍的提高,而且在千兆环境下几乎不丢包。

对于内核必须熟悉的可以用下面的方法,首先给内核源码打补丁(以下内容需要读者具备Linux内核编译基础)。

1).zcat linux-2.6.25-1-686-smp-PF_RING.patch.gz | patch -p0

2).在/usr/src/目录下的linux-2.6.25目录中,编辑Makefile 在这个地方加上一个自定义的后缀(比如-PF_RING):

EXTRAVERSION = -PF_RING

3).make menuconfig

这里按y选上PF_RING,然后保存修改到.config退出。然后就开始编译内核

#make

#make modules  安装编译好的modules

#make install

注意:将bzImage添加到grub中,以便用新内核启动(注意,新添加的内核不是默认启动项)

(用 make install 可以免去手动复制bzImage并生成initrd的繁琐过程)

进入libpcap-1.1.1-ring目录下,修改源码,将pf_ring的内核ring缓冲区设为2M,默认0.5M,然后修改MakeFile,将安装目录指向usr/,默认指向usr/local。接着编译make,然后make install;这样,就将libpfring.so ,pfring_e1000e_dna.h,pfring.h,libpfring.a拷贝到了usr/include或usr/lib下,同时用libpcap-1.1.1-ring的库文件替换了原来的libpcap库文件;

如果大家觉得这种修改内核的方法比较复杂,下面给大家推荐一个简单的方法到www.ntop.org,下载PF_RING-5.1.0.tar.gz包,解开PF_RING 以独立模块运行就成了,没有必要打 patch 到内核后直接make就可以。

#insmod ./pf_ring.ko   加载模块

# dmesg | grep RING

[PF_RING] Welcome to PF_RING 3.9.3                              # 这一部分是PF_RING初始化时输出的

[PF_RING] Ring slots       4096

[PF_RING] Slot version     9

[PF_RING] Capture TX       Yes [RX+TX]

[PF_RING] IP Defragment    No

[PF_RING] Initialized correctly

[PF_RING] registered /proc/net/pf_ring/

[PF_RING] successfully allocated 815104 bytes at 0xd0ad4000    # 以后每次运行PF_RING程序,会输出这样的调试信息

[PF_RING] allocated 4115 slots [slot_len=198][tot_mem=815104]

[PF_RING] removed /proc/net/pf_ring/2849-eth0.0

注意,刚启动机器时,ls /proc/net/pf_ring/ 是看不到这个目录的,只有当需要PF_RING的程序第一次运行时,才会生成这个目录以及一个info文件

安装完成后在shell下输入:

#dmesg |grep PF_RING即可验证是否配置成功,参见图4。

当你看到如图4所示的输出后就预示着这次对Ntop的性能提上改造成功,这时你的Ntop系统在数据包捕获性能上就比先前有所提高,能够适应更加大流量的网络环境。

51CTO学院优秀讲师评选中,我期待您的宝贵一票!

http://edu.51cto.com/lecturer/user_id-350944.html

时间: 2024-11-05 15:58:58

Ntop性能提升方案的相关文章

JavaScript执行效率与性能提升方案(转)

如何提升JavaScript执行效率与性能在前端开发中位于一个很重要的地方,这节来研究下如何在平时做项目过程中,提升JavaScript性能与运行效率,需要的朋友可以参考下如何提升JavaScript执行效率与性能在前端开发中位于一个很重要的地方,这节来研究下如何在平时做项目过程中,提升JavaScript性能与运行效率. 循环 循环是很常用的一个控制结构,大部分东西要依靠它来完成,在JavaScript中,我们可以使用for(;;),while(),for(in)三种循环,事实上,这三种循环中

对于HBase的MapReduce性能提升方案之BulkLoad

我们知道,在第一次海量数据批量入库时,我们会选择使用BulkLoad的方式. 简介一下BulkLoad原理方式:(1)通过MapReduce的方式,在Map或者Reduce端将输出格式化为HBase的底层存储文件HFile.(2)调用BulkLoad将第一个Job生成的HFile导入到对应的HBase表中. ps:请注意(1)HFile方式是所有的加载方案里面是最快的,前提是:数据必须第一个导入,表示空的!如果表中已经有数据,HFile再次导入的时候,HBase的表会触发split分割操作.(2

JS执行效率与性能提升方案

如果是追加字符串,最好使用s+=anotherStr操作,而不是要使用s=s+anotherStr.如果要连接多个字符串,应该少使用+=,如 s+=a;s+=b;s+=c;应该写成s+=a + b + c:而如果是收集字符串,比如多次对同一个字符串进行+=操作的话,最好使用一个缓存.怎么用呢?使用JavaScript数组来收集,最后使用join方法连接起来,如下var buf = new Array();for(var i = 0; i < 100; i++){ buf.push(i.toStr

Atitit.h5 web webview性能提升解决方案-----fileStrore缓存离线存储+http方案

1. 业务场景 android+webview h5 css背景图性能提升1 2. 根据标准,到目前为止,H5 一共有6种缓存机制,有些是之前已有,有些是 H5 才新加入的.1 2.1. 各种方案的比较,如下图2 3. Attilax的解决之道 file 缓存+http3 3.1. 图片的下载3 3.2. Jsbridge 4android5 3.3. http协议6 4. 参考8 1. 业务场景 android+webview h5 css背景图性能提升 图片的缓存大概儿需要500m的规模..

Web 应用性能提升 10 倍的 10 个建议

转载自http://blog.jobbole.com/94962/ 提升 Web 应用的性能变得越来越重要.线上经济活动的份额持续增长,当前发达世界中 5 % 的经济发生在互联网上(查看下面资源的统计信息). 我们现在所处的时代要求一直在线和互联互通,这意味着用户对性能有更高的期望.如果网站响应不及时,或者应用有明显的延迟,用户很快就会跑到竞争者那边去. 例如,Amazon 十年前做的一项研究表明,网页加载时间减少 100 毫秒,收入就会增加  1%.最近另一项研究凸显了一个事实,就是有一半以上

kvm性能优化方案

kvm性能优化方案 kvm性能优化,主要集中在cpu.内存.磁盘.网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节. cpu 在介绍cpu之前,必须要讲清楚numa的概念,建议先参考如下两篇文章 CPU Topology 玩转cpu-topology 查看cpu信息脚本: #!/bin/bash # Simple print cpu topology # Author: kodango function get_nr_proc

优化临时表使用,SQL语句性能提升100倍

[问题现象] 线上mysql数据库爆出一个慢查询,DBA观察发现,查询时服务器IO飙升,IO占用率达到100%, 执行时间长达7s左右.SQL语句如下:SELECT DISTINCT g.*, cp.name AS cp_name, c.name AS category_name, t.name AS type_name FROMgm_game g LEFT JOIN gm_cp cp ON cp.id = g.cp_id AND cp.deleted = 0 LEFT JOIN gm_cate

JDBC性能优化方案

近期用到了利用JDBC查询Oracle数据库,但是查询效率不尽人意,研究了一下JDBC方面可以优化的地方,在这里跟大家分享一下. 1.设置最优的预取值 defaultRowPrefetch:预取条数默认值 defaultBatchValue:触发查询操作的批量请求值 这两个参数的默认值都是10,我们可以通过增加这两个参数值来减少数据库请求以提高查询效率,当然具体值大小要视具体情况而定. 2.通过连接池获取连接 创建连接的代价很大,通过连接池获取连接可省去创建连接时间. 3.选择合适的Statem

Nginx引入线程池,性能提升9倍!

前言 Nginx以异步.事件驱动的方式处理连接.传统的方式是每个请求新起一个进程或线程,Nginx没这样做,它通过非阻塞sockets.epoll.kqueue等高效手段,实现一个worker进程处理多个连接和请求. 一般情况下是一个CPU内核对应一个worker进程,所以worker进程数量固定,并且不多,所以在任务切换上消耗的内存和CPU减少了.这种方式很不错,在高并发和扩展能力等方面都能体现. 看图说话,任务切换不见了. 但是异步事件模式很不喜欢阻塞(blocking).很多第三方模块使用