我们已经为不同的客户端设置了一个连接到本地networking的Firebird服务器的程序。
到目前为止,我们大多使用运行Ubuntu LTS的32位处理器(最近升级到10.04)。
现在我们介绍运行在64位处理器上的服务器,运行Ubuntu 10.04 64位。
突然间一些查询运行得比以前慢。
简而言之,在本地运行查询在64位和32位服务器上都能正常工作,但是当通过networking运行相同的查询时,64位服务器突然变慢了。
我们使用Flamerobin中运行的相同的数据库和相同的查询,对本地和远程连接到64位和32位服务器进行了一些检查。
在本地运行查询需要的时间可以忽略不计:64位服务器上为0.008秒,32位服务器上为0.014秒。 所以服务器本身运行良好。
在networking上运行查询,64位服务器突然需要高达0.160s的响应,而32位服务器响应0.055s。
所以旧服务器的速度是networking的两倍,尽pipe新服务器在本地运行速度要快两倍。
除此之外,设置是相同的。 所有的服务器都运行相同的安装Ubuntu 10.04,相同版本的火鸟等,唯一的区别是,一些是64和一些32位。
任何想法??
我试图谷歌它,但我找不到任何抱怨,火鸟64位比火鸟32位慢,除了火鸟2.1改变日志提到,有一个新的networkingAPI是两倍的速度,只要驱动程序更新使用它。
所以我可以想象,64位驱动程序仍在使用旧的API,但是这是一个有点延伸,我猜。
提前Thanx任何答复! 🙂
是在64位服务器上的其他networking交易缓慢? 可能是一个简单的坏或过时的networking驱动程序。
请确保新老服务器上的以下内容
检查旧服务器和新服务器上的窗口缩放
连接的读写缓冲区
缓冲区的大小可以根据需要调整
root@x:~# sysctl -A | grep net | grep mem
检查这些variables
这些指定了内核中所有networking连接的最大默认内存缓冲区使用情况
net.core.wmem_max = 131071 net.core.rmem_max = 131071 net.core.wmem_default = 126976 net.core.rmem_default = 126976
这些指定了特定于TCP连接的缓冲存储器使用情况
net.ipv4.tcp_mem = 378528 504704 757056 net.ipv4.tcp_wmem = 4096 16384 4194304 net.ipv4.tcp_rmem = 4096 87380 4194304
指定的三个值是“最小默认最大”缓冲区大小。 因此,以Linux开始将使用每个连接的读写缓冲区的默认值。 随着连接数量的增加,这些缓冲区将会减less(最多不超过指定的最小值)。 最大缓冲值的情况也是如此。
这些值可以用这个sysctl -w KEY=KEY VALUE来设置
检查其他的tcpnetworking参数
试试这些
在旧的服务器上
sysctl -a | grep ^net.ipv4 >s1
在新的服务器上
sysctl -a | grep ^net.ipv4 >s2
现在做一个文件s1和s2(将s2复制到旧服务器之后)的差异
diff s1 s2
这将显示参数的差异
检查iptables的状态
iptables -L iptables -t nat -L
在两个服务器上
还要检查selinux的状态