3

Ubuntu 12.04 LTS

java -version
java version "1.6.0_38"
Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
Java HotSpot(TM) 64-Bit Server VM (build 20.13-b02, 混合模式)

4 核 CPU - 一些戴尔服务器硬件

10 个线程不时在几分钟内运行“繁重”作业。在其他时期,他们什么都不做。
1 个线程应该每 5 秒(左右)唤醒一次,并通过网络向另一个进程发送快速 ping。只要其他 10 个线程不执行任何操作,它就可以很好地工作,但是当其他 10 个线程运行“繁重”作业时,它永远不会(或很少)运行并发送它的 ping。

如果这个“繁重”的工作是 CPU 密集型的,我可以理解这一点。但是在这样一个“繁重”的工作中,top 说 50-100% IO-wait 但大约 1% 的 CPU 使用率。分析表明,到目前为止,这 10 个线程所花费的大部分时间都花在(我猜是在等待)一些 NIO 调用中。这一切都加起来了,并且有点意料之中,因为这项工作的许多繁重工作是从磁盘读取文件。

我不明白的是,在如此“繁重”的工作中,执行 ping 操作的 1 个线程无法运行。当 top 显示 1% 的 CPU 使用率并且看起来(分析和 top)这 10 个线程大部分时间都在等待 IO 时,如何解释这一点。当其他线程正在等待 IO 时,1 ping 线程是否应该获得执行时间?

Java 线程优先级在所有 11 个线程上都相同。

在 10 个线程中到处散布一些产量似乎可以解决(或降低)问题,但我根本不明白为什么 ping 线程在没有产量的情况下无法运行,而其他线程没有做太多但等待对于 IO。

附加信息 05.03.2014

我已经在一个更简单的设置中重现了这个问题——尽管还不是很简单(你必须了解如何安装 Apache Zookeeper 服务器,但它相当简单——我可以稍后提供信息)

在此处查找 Eclipse Kepler 项目(maven - 由“mvn 包”构建):https
://dl.dropboxusercontent.com/u/25718039/io-test.zip 在此处查找二进制文件:https ://dl.dropboxusercontent.com/u /25718039/io-test-1.0-SNAPSHOT-jar-with-dependencies.jar

在机器上启动 Apache ZooKeeper 3.4.5(端口 2181)服务器。在另一台单独的机器上(这是我上面描述的 Ubuntu 12.04 LTS 等)运行二进制文件如下(首先创建一个文件夹 io-test-files - 需要 50GB 空间)

nohup java -cp io-test-1.0-SNAPSHOT-jar-with-dependencies.jar dk.designware.io_test.ZKIOTest ./io-test-files 10 1024 5000000 IP-of-ZooKeeper-server:2181 > ./io-test-files/stdouterr.txt 2>&1 &

首先它创建 10 个 5GB 文件(50GB 比机器 RAM 多得多,因此操作系统文件缓存没有多大帮助),然后启动 ZooKeeper 客户端(它应该通过定期发送 pings/heartbeats 来保持与 ZooKeeper 服务器的连接) ,然后让 10 个线程对 10 个文件进行随机访问,从而创建大量磁盘 IO,但实际上并没有真正使用 CPU。我看到 ZooKeeper 客户端最终失去了连接(“Zk state”-prints 停止说“CONNECTED”-在 stdouterr.txt 中),这基本上是我不明白的。ZooKeeper 客户端线程只想发送一个相隔几秒的微小心跳,只有在 20 秒内无法发送,才会失去连接。我希望它可以轻松访问 CPU,

在测试期间,我使用“top”看到以下内容

  • 非常高的“平均负载”。以上10个我不明白,因为基本上只有10个线程在做某事。我还认为“平均负载”只计算了真正想要在 CPU 上执行实际操作的线程(不包括等待 IO),但根据 http://en.wikipedia.org/wiki/Load_%28computing%29 Linux还计算“不间断睡眠”,包括等待 IO 的线程。但我真的不希望/认为它会阻止其他有实际工作要做的线程获得 CPU
  • 非常高的 %wa,但 CPU 上几乎没有 %sy 和 %us

这是我的一次运行的输出:https ://dl.dropboxusercontent.com/u/25718039/io-test-output.txt

4

0 回答 0