java - 带有 Groovy 的 Nifi ExecuteScript:OOM 异常
问题描述
我在 NiFi 中使用 ExecuteScript 处理器使用我指定的流文件执行 PUT 命令。但是,现在当文件大于 2GB 时,我得到了 OutOfMemory 异常。我在 NiFi 上的内存设置要高得多。我还看到更大的流文件可以与其他一些提供的 Nifi 处理器一起使用。
我不能使用 InvokeHTTP,因为我有 2 个不同的返回码,它们的关系相互冲突,需要处理。
目前我对 NiFi 的 JVM 设置是
java.arg.2=-Xms16g
java.arg.3=-Xmx32g
这是数据如何被 PUT 的片段。
InputStream i = session.read(flowFile)
def baseUrl = new URL(Location)
def connection = baseUrl.openConnection()
connection.setDoOutput(true)
connection.setRequestMethod('PUT')
connection.connect()
OutputStream os = connection.getOutputStream()
os << i
i.close()
os.flush()
os.close()
NiFi中是否需要设置groovy设置以增加此内存限制?当前运行 NiFi 1.9.2
解决方案
使用输入流读取缓冲区并添加 ChunkedStreamingMode 解决了问题
connection.setChunkedStreamingMode(1024)
byte[] buffer = new byte[1024];
int len;
while ((len = i.read(buffer)) != -1) {
os.write(buffer, 0, len);
os.flush;
}
推荐阅读
- laravel - 如何强制一个独特的规则忽略给定的 id?
- android - 在 Android 复合视图中不接受来自 xml 的 onclick
- angularjs - 将带有 ng-model 的复选框添加到 Object AngularJS
- php - 如何从 htdocs 或 xampp 文件夹之外的 cmd 启动任何项目?
- java - 仅当我的 @Test 通过时才运行 @AfterMethod,而不是在 @Test 失败时运行
- spring - 访问被拒绝(用户是匿名的);重定向到身份验证入口点
- logstash-grok - 可选字段的 GROK 模式
- asp.net - 将文件复制到远程服务器会导致配置错误?
- android - 在 Android Studio 中哪里可以找到自定义模板路径
- paypal - 通过 webview 扑动贝宝