- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有一个在 gridgain 之上运行的应用程序,并且在它开始表现得很滑稽之前进行了大约 12-24 小时的压力测试,并且非常成功。这段时间过后,应用程序将突然开始回复所有异常 java.nio.channels.ClosedByInterruptException 的查询(完整堆栈跟踪位于 http://pastie.org/664717
失败的方法是(编辑为使用@stephenc 反馈)
public static com.vlc.edge.FileChannel createChannel(final File file) {
FileChannel channel = null;
try {
channel = new FileInputStream(file).getChannel();
channel.position(0);
final com.vlc.edge.FileChannel fileChannel = new FileChannelImpl(channel);
channel = null;
return fileChannel;
} catch (FileNotFoundException e) {
throw new VlcRuntimeException("Failed to open file: " + file, e);
} catch (IOException e) {
throw new VlcRuntimeException(e);
} finally {
if (channel != null) {
try {
channel.close();
} catch (IOException e){
// noop
LOGGER.error("There was a problem closing the file: " + file);
}
}
}
}
并且调用函数正确地关闭了对象
private void fillContactBuffer(final File signFile) {
contactBuffer = ByteBuffer.allocate((int) signFile.length());
final FileChannel channel = FileUtils.createChannel(signFile);
try {
channel.read(contactBuffer);
} finally {
channel.close();
}
contactBuffer.rewind();
}
该应用程序基本上用作分布式文件解析器,因此它执行大量此类操作(通常每个节点的每个查询会打开大约 10 个此类 channel )。似乎在一段时间后它无法打开文件,我无法解释为什么会发生这种情况,如果有人能告诉我可能导致这种情况的原因以及我如何进行跟踪,我将不胜感激它下来并修复它。如果它可能与文件句柄耗尽有关,我很想听听任何确定确定的提示......即在运行时查询 JVM 或使用 linux 命令行工具来查找有关当前打开的句柄的更多信息.
更新:我一直在使用命令行工具来查询 lsof 的输出,但未能看到文件句柄保持打开状态的任何证据......网格具有非常稳定的打开文件配置文件,我可以看到随着上述代码的执行而发生变化......但它总是返回到稳定数量的打开文件。
与此问题相关:Freeing java file handles
最佳答案
有几种情况可能无法关闭文件句柄:
createChannel(...)
而没有调用 fillContactBuffer(...)
如果channel.position(0)
抛出异常, channel 不会关闭。解决方法是重新排列代码,使以下语句位于 try
block 内。
channel.position(0);
return new FileChannelImpl(channel);
编辑:查看堆栈跟踪,这两种方法似乎在不同的代码库中。我会将责任归咎于 createChannel
方法。它可能会泄漏,即使它不是问题的根源。它需要一个内部 finally
子句来确保在发生异常时关闭 channel 。
像这样的东西应该可以解决问题。请注意,您需要确保 finally
block 不会在成功时关闭 channel !
public static com.vlc.edge.FileChannel createChannel(final File file) {
final FileChannel channel = null;
try {
channel = new FileInputStream(file).getChannel();
channel.position(0);
FileChannel res = new FileChannelImpl(channel);
channel = null;
return res;
} catch (FileNotFoundException e) {
throw new VlcRuntimeException("Failed to open file: " + file, e);
} catch (IOException e) {
throw new VlcRuntimeException(e);
} finally {
if (channel != null) {
try {
channel.close();
} catch (...) {
...
}
}
}
}
跟进很久以后
鉴于文件句柄泄漏已被排除在外,我的下一个理论是服务器端实际上是在使用 Thread.interrupt()
中断它自己的线程。一些低级 I/O 调用通过抛出异常来响应中断,这里抛出的根异常看起来就像这样一个异常。
这并不能解释为什么会发生这种情况,但我粗略地猜测,这是服务器端框架试图解决过载或死锁问题。
关于Java Gridgain 应用程序在压力测试 1 天后开始失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1605522/
主题,我为什么要问,因为 ./ggvisor.cmd 告诉我,即使我在配置中更改堆外内存也不会更改,如此处所述http://atlassian.gridgain。 com/wiki/display/G
如何从 ignite/gridgain 捕获操作统计信息,例如每台服务器的 put/sec、gets/sec。 是否可以将它们输出到某个文件中以便我们稍后分析? 最佳答案 可以使用 IgniteCac
我有 Gridgain 三节点集群,并且还在所有三个节点上运行 Gridgain Web 控制台代理和 Web 控制台。它全部托管在 Windows Server 上。 我想对我的 Web 控制台进行
我试图了解如何使用内存加速器在单个JVM上下文中使用Gridgain运行Hadoop应用程序。 我已经看到了一些提示,可以像here那样以编程方式完成此操作。但是,尝试在eclipse中运行此示例后,
我是 Gridgain 的新手,我想知道如何将远程节点添加到程序中。有没有一些配置文件。我在指南中没有看到明确的示例。 (我见过的最糟糕的指南) 最佳答案 默认情况下,GridGain 使用多播发现,
我使用 GridGain 创建了一个消息系统来实现。我有一个由 GridGain GridProjection 组成的 MessageCenter 类,我的设置看起来像这样 Gateway-> Mes
有谁知道是否有可能使用GridGain实现内存数据网格中存储的对象的模板搜索?让我们考虑以下几点。您有这些类(class): class Employee{ private Long id; pr
我在Hadoop v1.1.2上使用Hadoop Accelerator,我做了hadoop自述文件中给出的配置。 使用start-all.sh启动集群时,jobtracker没有启动。它引发以下错误
我们有 3 个节点的 Gridgain 服务器,在 GCP Kubernetes 引擎中部署了 3 个客户端节点。集群启用了 native 持久性。还有 作为关闭策略。每个缓存都有一个备份。自动集群重
我正在尝试对大型分布式数据集执行一些数值计算。该算法非常适合 MapReduce 模型,具有以下附加属性:与输入数据相比,映射步骤的输出尺寸较小。数据可以被视为只读,并且静态分布在节点上(故障转移时的
我们有 3 个节点的 Gridgain 服务器,在 GCP Kubernetes 引擎中部署了 3 个客户端节点。集群启用了 native 持久性。还有 作为关闭策略。每个缓存都有一个备份。自动集群重
我已经实现了我的第一个 GridGain 应用程序,但没有获得预期的性能改进。可悲的是它更慢。我需要一些帮助来改进我的实现,以便更快。 我的应用程序的要点是我正在使用数百万个可能的参数进行强力优化,每
我正在尝试缓存一些表的大型数据集,我的服务器是基于 centos 的,具有 8Go ram 和 500Go 磁盘空间 我将我的本地存储策略配置为持续存在,并且在遇到文件打开限制问题后,我尝试按照这些步
需要弄清楚为什么我的代码不起作用,需要更多信息。调试消息可能会有所帮助。 如何在 Debug模式下启动GridGain节点? 最佳答案 要在 Debug模式下启动 GridGain,请添加额外的 JV
当我启动 GridGain 节点时,出现以下异常: Exception in thread "main" java.lang.NoClassDefFoundError: org/gridgain/gr
我无法理解 Apache Ignite 和 GridGain 平台之间的区别。他们是平等的?或者 GridGain 是 Apache Ignite 实现的标准? 最佳答案 来自 the website
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎偏离主题,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或 include a mini
正如问题所说,这在 GridGain 中可能吗?网格中的所有节点都是连续的? 这就像 JUG 提供的基于文件时间的 GUID 生成。用于顺序 UUID 的 Java 库,可以跨 Java VM 安全使
所以我有一个在 gridgain 之上运行的应用程序,并且在它开始表现得很滑稽之前进行了大约 12-24 小时的压力测试,并且非常成功。这段时间过后,应用程序将突然开始回复所有异常 java.nio.
我正在尝试连接到配置为计算节点的现有 GridGain 节点网格,但是我还没有设法找到一种无需以编程方式启动和内存中节点即可连接到集群的方法。 我什至尝试在我的 Java 应用程序中复制配置,但仍然没
我是一名优秀的程序员,十分优秀!