bcm 5709网卡驱动问题引发的线上问题

今年新上了一批机器用的是bcm 5709的网卡,由于使用的OS版本比较老,带的驱动bug比较多造成线上问题频繁。检查了一下# lspci | grep -i Ethernet03:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)03:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)04:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)04:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20) ethtool -G eth0 rx 1020 修改配置# ethtool -g eth0Ring parameters for eth0:Pre- set maximums:RX: 1020RX Mini: 0RX Jumbo: 4080TX: 255Current hardware settings:RX: 1020RX Mini: 0RX Jumbo: 0TX: 255 但是这样修改后发现并没有缓解,后来继续搜了一下,发现是固件的bug。后来把RHEL的内核更新到最新版,问题得到了修复。 ...

March 19, 2013 · 1 min · pm

gnome-shell扩展安装

在gnome-shell下使用一些IM的时候非常不方便,收到消息要么设置成自动弹出,要么设置为闪动.设置成自动弹出的时候非常影响做其他的事情,但是设置为闪动又会耽误一些重要的信息,而且每次状态烂自动隐藏鼠标拖下去搞几下才能把状态栏显示出来,再点闪动的消息提醒更是难用的要死. 其实以前用gnome2的时候,觉得还是比较好的,稳定性什么的都不错.使用习惯也还可以.今天装了个插件gnome-shell-frippery装好后在gnome-tweak-tool里设置了一下打开bottom panel就行了.效果和以前的gnome2差不多. [gnome-shell-frippery](http://intgat.tigress.co.uk/rmy/extensions/index.html)

March 19, 2013 · 1 min · pm

处理缺少动态链接库的通用方法

在公司里,SA习惯把很多包直接拷贝到其他的机器上,因为缺少包管理工具做依赖性的检查。经常遇到开发找我解决一些缺失动态连接库引起的问题。其实解决起来也很简单ldd查看一下到底少什么库,再google一下对应的库是属于什么包的,然后装上就OK了。已今天遇到的mod_ssl.so不能加载的问题为例。# ldd mod_ssl.solinux-gate.so.1 => (0xffffe000)libssl.so.4 => not foundlibcrypto.so.4 => not foundlibgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xf7f31000)libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xf7e9b000)libcom_err.so.2 => /lib/libcom_err.so.2 (0xf7e97000)libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xf7e71000)libresolv.so.2 => /lib/libresolv.so.2 (0xf7e5e000)libdl.so.2 => /lib/libdl.so.2 (0xf7e5a000)libz.so.1 => /usr/lib/libz.so.1 (0xf7e47000)libpthread.so.0 => /lib/libpthread.so.0 (0xf7e2f000)libc.so.6 => /lib/libc.so.6 (0xf7ce8000)libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0xf7cdf000)libkeyutils.so.1 => /lib/libkeyutils.so.1 (0xf7cdc000)/lib/ld-linux.so.2 (0x00a3e000)libselinux.so.1 => /lib/libselinux.so.1 (0xf7cc4000)libsepol.so.1 => /lib/libsepol.so.1 (0xf7c7e000) yum install openssl097a.x86_64 openssl097a.i386 LDD(1) LDD(1) NAMEldd – print shared library dependencies SYNOPSISldd [OPTION]… FILE… DESCRIPTIONldd prints the shared libraries required by each program or sharedlibrary specified on the command line. OPTIONS–versionPrint the version number of ldd. ...

March 12, 2013 · 1 min · pm

fcitx在gnome3下的安装

fcitx总体来说还是很不错的一个中文输入法。不过虽然很简单的一个东西,每次安装都有点这样那样的问题。要选的包有fcitx,fcitx-config-gtk2,fcitx-ui-classic,fcitx-frontend-gtk2,fcitx-frontend-gtk3,im-switch.每次安装后运行一下im-switch选一下fcitx。然后需要注意重启一下dbus才行。

January 11, 2013 · 1 min · pm

64位linux下单个进程的最大线程数

32位系统下的单个进程的最大线程数受限于3G的虚拟内存限制,所以能起的线程最多就1024*3/8=384个。那么64位的系统是不是就没有限制了呢?实际上64位系统的情况就比较复杂了,有很多限制条件。。比如/proc/sys/kernel/pid_max 设置的 pid的最大值(默认32768); /proc/sys/kernel/threads-max 设置的最大线程数(默认32128)。/proc/sys/vm/max_map_count(默认65530)设置最大的内存映射区域数量。另外就是 /proc/sys/vm/overcommit_memory 和/proc/sys/vm/overcommit_ratio 也有些关系。 max_thread.c[c]#include#include#include#define MAX 40000void *sleep1k(void){sleep(1000); return NULL; }int main(){int i = 0; pthread_t thread; [/c]

December 22, 2012 · 1 min · pm

TCP的7个定时器

这两天看了下TCP/IP详解的第二卷,买了很久把第一卷和第三卷大概都看了下,但是第二卷一直没有怎么看过。实际上在第一卷里就经常提到这个定时器的概念,在第二卷里25章是专门介绍定时器的。7种定时器分别是1.连接建立定时器。在发送每个SYN的时候会启动,如果在75s内没有收到对方的ACK,那么连接终止。2.保活定时器。在新建socket的时候如果指定了SO_KEEPALIVE才会生效。链接超过设置的时候就会连续发几次探测包,如果对几次尝试都没有收到回复就减低对方已经崩溃。这个两个定时器的实现: 3.重传定时器。在发送数据的时候,如果指定时间内没有收到对放的回复就会启动重传。如果一次重传后对方还是没有回应,那么这个重转时限每次都会进行调整,越来越长。4.persist定时器。在连接的对端通告窗口为0 的时候会启动一个定时器,在指定的时间内不像对方发送数据。当定时器超时后才会向对方发送1字节的数据。5.延迟ACK定时器。当收到对方的确认请求后,这个请求虽然是必须要确认的,但是不是太急,那么就启动定时器200ms,如果在这个定时器超时之前又收到对方的数据,那么就把最新的ACK发回去就行了。这个主要是持续传输数据的时候使用,比如A向B先发出了N-N+1000报文段,这个时候A就期望收到ACK是N+1001,如果A接着继续发了N+1001-N+2001,那么只需要把ACK的序号设置为N+2002就能对前面的2个报文一起做确认了。6.FIN_WAIT2定时器。A与B是ESTABLISHED的时候,如果A主动发起关闭,调用了close,那么就A会主动对B发送FIN,这个时候A就进入了FIN_WAIT1状态,而B在收到FIN后回复ACK时就变成了CLOSE_WAIT,在A发出FIN和收到ACK的这段时间内A处于FIN_WAIT1,A收到ACK后状态变化为FIN_WAIT2。但是如果B始终不给A发FIN包,岂不是A就一直得在FIN_WAIT2状态?所以有了FIN_WAIT2定时器,linux下默认是60s,其实就是内核参数tcp_fin_timeout 设置的那个参数。当定时器超时后就会把FIN_WAIT2会自动转换到TIME_WIAT状态。7.TIME_WAIT定时器。这个就是2MSL的时间了,链接主动关闭后等待回收的一段时间,2MSL称为平静时间,就是为了防止如果这个socket被马上重新使用了,之前的那个链接有迟到(后者重传过来的包)到了的话会被新socket直接接收到。linux对这个的定义是写死在头文件的。定义在net/tcp.h #define TCP_TIMEWAIT_LEN (60*HZ) 约为60s 可能每个系统具体的实现和书上的不一样,不过从概念上还是好理解的。

December 12, 2012 · 1 min · pm

用nmap扫描OS类型

nmap里面可以根据FIN探查,无效标志探查,ISN采样,DF标志位监控,TCP初始化窗口大小,ACK的值,ICMP出错消息,ICMP消息内容,TOS字段,数据包拆分处理和一些其他的TCP选项来大概猜测远程OS的类型。直接bash sudo nmap -O www.domain.com -D 8.8.8.8 就能对相应的主机进行扫描,-D是伪装IP 源。```bash www.ebay.com Starting Nmap 6.00 ( http://nmap.org ) at 2012-10-20 19:02 CSTNmap scan report for www.ebay.com (66.211.181.181)Host is up (0.56s latency).Other addresses for www.ebay.com (not scanned): 66.211.181.161 66.135.210.181 66.135.210.61 66.135.200.181 66.135.200.161Not shown: 998 filtered portsPORT STATE SERVICE80/tcp open http443/tcp closed httpsDevice type: load balancerRunning (JUST GUESSING): Citrix embedded (85%)Aggressive OS guesses: Citrix NetScaler load balancer (85%)No exact OS matches for host (test conditions non-ideal). 当然,如果想扫描一下开的端口啥的直接-sS扫描吧,也可以选ACK扫描,那就-sA pm@debian:~sudo nmap -sS www.baidu.com ```bash Starting Nmap 6.00 ( http://nmap.org ) at 2012-10-20 19:06 CST^Cpm@debian:~$ sudo nmap -sS www.google.com

October 20, 2012 · 1 min · pm

debian下初试lxc

现在容器型的虚拟化也很流行了,主要是相对XEN,KVM之类的能节省资源一些,这两天事情不是太多就简单了一下。主要参考了debian的wiki(http://wiki.debian.org/LXC).我不是太喜欢把自己用的电脑搞一堆实验性的配置,所以就在virtualbox里面装了一个debian做宿主机再进行的,virtualbox使用的是桥接模式。1.宿主机里面配置了一个网桥/etc/network/interfaces#allow-hotplug eth0#iface eth0 inet dhcp auto br0iface br0 inet dhcpbridge_ports eth0bridge_fd 0bridge_maxwait 0 root@linux:~# brctl showbridge name bridge id STP enabled interfacesbr0 8000.080027d2351d no eth0 2.宿主机安装基础的软件和配置2.1 安装 lxc bridge-utils libvirt-bin debootstrapaptitude install lxc bridge-utils libvirt-bin debootstrap2.2 /etc/fstab 添加cgroup /sys/fs/cgroup cgroup defaults 0 02.3 拷贝一份模板cp -a /usr/lib/lxc/templates/lxc-debian /usr/lib/lxc/templates/lxc-squeeze并把/usr/lib/lxc/templates/lxc-squeeze里面的 lenny替换为squeeze,把dhcp-client替换为isc-dhcp-client 启动之后我们可以brctl show看看 root@linux:~# brctl showbridge name bridge id STP enabled interfacesbr0 8000.080027d2351d no eth0vethyXMqY8root@linux:~# ifconfigbr0 Link encap:Ethernet HWaddr 08:00:27:d2:35:1dinet addr:192.168.2.207 Bcast:192.168.2.255 Mask:255.255.255.0inet6 addr: fe80::a00:27ff:fed2:351d/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:525 errors:0 dropped:0 overruns:0 frame:0TX packets:314 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:45074 (44.0 KiB) TX bytes:50956 (49.7 KiB) 是br0下新增了一个网卡。 ...

October 9, 2012 · 1 min · pm