寻觅生命中的那一片浅草......

文章属于类别 Linux

Using flock() in Bash without invoking a subshell

我们目前利用了flock来限制并发,通常是用一个小括号把需要执行的代码包含起来,这样就会产生一个子shell,带来的问题是父shell无法获得子shell的返回值,昨天刚好Google到这个文章,在这里贴下。

#!/bin/bash

(
flock -s 200

# … commands executed under lock …

) 200>/var/lock/mylockfile
Unfortunately, this invokes a subshell which has the following drawbacks:

You cannot pass values to variables from the subshell in the main shell script.
There is a performance penalty.
The syntax coloring in “vim” does not work properly. :)
This motivated my colleague zImage to come up with a usage form which does not invoke a subshell in Bash:

#!/bin/bash

exec 200>/var/lock/mylockfile || exit 1
flock -n 200 || { echo “ERROR: flock() failed.” >&2; exit 1; }

# … commands executed under lock …

flock -u 200

原文见:Using flock() in Bash without invoking a subshell

【转】pt-ioprofile定位负载来源文件

pt-ioprofile定位负载来源文件
官网介绍
http://www.percona.com/doc/percona-toolkit/2.0/index.html
wget percona.com/get/percona-toolkit.tar.gz
tar xf percona-toolkit.tar.gz
cd percona-toolkit
perl Makefile.PL
make
make install
查看pid为6378 的进程io情况分析 这里是mysqld进程,对于定位问题更有用的是通过IO的吞吐量来进行定位。使用参数 –cell=sizes,该参数将结果已 B/s 的方式展示出来
pt-ioprofile –profile-pid=6378 –cell=sizes –run-time=1
下面这条可以进行时时观察,
watch -n 1 pt-ioprofile –profile-pid=6378 –cell=sizes –run-time=1

转载自:http://www.huanglihuang.com/post/20.html

Linux网关、多出口、VPN撞在一起的问题

Linux网关,本来只有一进一出2个网卡

eth0:外网

eth1:内网 192.168.100.1

所以iptables的规则看起来是这样

-A POSTROUTING -s 192.168.0.0/16 -o eth0 -j MASQUERADE

由于业务需要 ,加了一个出口,修改后

eth0:外网

eth2:外网

eth1:内网 192.168.100.1

这时数据会根据路由,从不同的出口出,所以不能加-o eth0了,所以规则改成了

-A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE

这个变更带来的问题就是,我们vpn拨号获取到的也是192.168.0.0/16段的,然后我们访问内网的服务器,在服务器上看到的就是网关的内网IP:192.168.100.1,为什么?因为它也被MASQUERADE了。

当vpn用户登录服务器出现问题的时候,我们要排查,这下问题来了,这么多用户,在服务器上看到的都是192.168.100.1,根本无法查,上网找了下,发现了神一样的规则,应用后,在服务器上看到的又是VPN分配的原始IP了

-A POSTROUTING -s 192.168.0.0/16 ! -d 192.168.0.0/16 -j MASQUERADE

lv变成inactive状态

今天XenServer重启,发现有个SR不可用,进控制台,lvdisplay还可以看到,但lvscan发现是inactive状态

解决办法: vgchange -a y

没什么技术含量,年纪大,记性差,作个记录

2.6.32-279.5.2.el6.x86_64引起的软中断不均衡

昨天代理反馈游戏卡顿,玩家闹得厉害,ping服务器的时候,延迟非常不稳定,100-400ms不等,找不到原因,研发反馈
玩家反馈卡顿的时间,与大型活动开启时间点吻合,怀疑是玩家较多引起流量过大导致,但看Zabbix监控,该机器流量最大
也只有18Mbit/s而已,带宽未满,不应该这样。

深夜登上去查了些服务器状态,发现软中断集中在CPU0,胸当诡异,经查,有开启irqbalance服务,查网卡中断亲和性也确实
是有设置。肿么不生效呢?百思不得骑姐。

想起最近几天研究cpu中断和RPS/RFS时看到的一文:http://hi.baidu.com/nw207/item/ab9098411d76ab31fa896027
里面有提到博通网卡,因为开启MSI而导致CPU中断亲和性不生效的问题,难道是网卡驱动引起?然后看了下网卡的驱动,并
以另外一台CPU软中断均衡的作对比。

一、系统环境
CentOS 6.2 64bit,开启了irqbalance服务

网卡型号
Ethernet controller: Broadcom Corporation NetXtreme BCM5719 Gigabit Ethernet PCIe (rev 01)

二、有问题机器:

1、内核:2.6.32-279.5.2.el6.x86_64

2、网卡驱动信息
driver: tg3
version: 3.122
firmware-version: 5719-v1.33 NCSI v1.0.60.0
bus-info: 0000:03:00.0

三、没有问题机器

1、内核:2.6.32-358.14.1.el6.x86_64

2、网卡驱动信息
driver: tg3
version: 3.124
firmware-version: 5719-v1.33 NCSI v1.0.60.0
bus-info: 0000:03:00.0

四、测试

手头上刚好有一台同配置机器,内核是CentOS6.2默认版本,2.6.32-220.el6.x86_64,

题外话,此版本内核,CPU软中断是正常的,但因为它在约220天的时候,会莫名宕机,所以我们一般是把它升级为2.6.32-279.5.2.el6.x86_64

好,我升级将它升级到2.6.32-279.5.2.el6.x86_64,重启机器,发现CPU软中断马上集中在CPU0
然后我再升级到2.6.32-358.14.1.el6.x86_64,重启,CPU软中断马上均衡了,至此,问题解决,安排了生产服维护,升级内核。

2025年六月
« 5月    
 1
2345678
9101112131415
16171819202122
23242526272829
30