小编Rob*_*ger的帖子

强制JVM在没有页面缓存的情况下执行所有IO(例如O_DIRECT)

我正在做一些用Java编写的应用程序的基准测试.对于实验来说非常重要的是结果不受页面缓存的影响(我正在使用linux)

因此,无论何时打开文件,避免页面缓存的最佳方法是使用O_DIRECT.因此,我改变了jre源代码中的相应代码.

我的方法适用于通过FileOutputStream(例如写作)的所有内容,但它不适用于FileInputStream(例如阅读).

将O_DIRECT添加到open-call时FileInputStream,JVM无法加载任何类:

Error: Could not find or load main class perf.TestDirectIO
Run Code Online (Sandbox Code Playgroud)

这个错误是不是一个类路径的问题,因为我可以通过使用"未受攻击" JVM修复它.

因此打开文件似乎存在问题.

我对如何解决这个问题的任何建议感到非常高兴.

如果有人想做类似的事情,我已经在我的博客中记录了整个黑客.


作为参考,这些是我对JVM代码所做的更改:

jdk/src/share/native/java/io/FileInputStream.c:

 @@ -58,7 +60,8 @@
 JNIEXPORT void JNICALL
 Java_java_io_FileInputStream_open(JNIEnv *env, jobject this, jstring path) {
-    fileOpen(env, this, path, fis_fd, O_RDONLY);
+    fileOpen(env, this, path, fis_fd, O_RDONLY | O_DIRECT); // this is the change that causes all the problems
 }
Run Code Online (Sandbox Code Playgroud)

此更改有效 jdk/src/solaris/native/java/io/FileOutputStream_md.c:

@@ -55,8 +55,10 @@
 JNIEXPORT void JNICALL
 Java_java_io_FileOutputStream_open(JNIEnv *env, …
Run Code Online (Sandbox Code Playgroud)

java linux jvm

11
推荐指数
4
解决办法
4897
查看次数

从IDE运行Flink时,如何启动Flink作业管理器Web界面

我想从IDE本地启动它时访问Flink Web界面.

我需要这个,因为我想访问Flink的计数器(累加器).

apache-flink

11
推荐指数
2
解决办法
2275
查看次数

在Apache Flink中使用集合$ UnmodifiableCollection

使用Apache Flink时使用以下代码:

DataStream<List<String>> result = source.window(Time.of(1, TimeUnit.SECONDS)).mapWindow(new WindowMapFunction<String, List<String>>() {

    @Override
    public void mapWindow(Iterable<String> iterable, Collector<List<String>> collector) throws Exception {
        List<String> top5 = Ordering.natural().greatestOf(iterable, 5);
        collector.collect(top5);
    }
}).flatten();
Run Code Online (Sandbox Code Playgroud)

我得到了这个例外

Caused by: java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableCollection.add(Collections.java:1055)
    at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:116)
    at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:22)
    at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:761)
    at org.apache.flink.api.java.typeutils.runtime.kryo.KryoSerializer.deserialize(KryoSerializer.java:211)
    at org.apache.flink.streaming.runtime.streamrecord.StreamRecordSerializer.deserialize(StreamRecordSerializer.java:110)
    at org.apache.flink.streaming.runtime.streamrecord.StreamRecordSerializer.deserialize(StreamRecordSerializer.java:41)
    at org.apache.flink.runtime.plugable.NonReusingDeserializationDelegate.read(NonReusingDeserializationDelegate.java:55)
    at org.apache.flink.runtime.io.network.api.serialization.SpillingAdaptiveSpanningRecordDeserializer.getNextRecord(SpillingAdaptiveSpanningRecordDeserializer.java:125)
    at org.apache.flink.streaming.runtime.io.StreamInputProcessor.processInput(StreamInputProcessor.java:127)
    at org.apache.flink.streaming.runtime.tasks.OneInputStreamTask.run(OneInputStreamTask.java:56)
    at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:172)
    at org.apache.flink.runtime.taskmanager.Task.run(Task.java:581)
    at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

我怎么UnmodifiableCollection能跟Flink一起玩?

kryo apache-flink

8
推荐指数
1
解决办法
1242
查看次数

触发除主分支之外的所有分支的 GitHub Actions,其中唯一的工作流程定义文件是

我正在尝试构建一个存储库,它允许我为我正在分叉的项目的不同版本构建 Docker 映像。存储库应具有以下布局:

  • main定义工作流的分支,带有触发器,例如:
    on:
       push:
         branches-ignore:
           - main
    
    Run Code Online (Sandbox Code Playgroud) 该工作流程从任何分支构建软件(基本上是mvn clean packagedocker build并且docker push适用于软件的所有版本)
  • 许多software-1.2.3不包含任何.github/workflow文件的分支(将此文件复制到每个分支并在那里维护会很麻烦)

从我迄今为止的研究来看,GitHub Actions 似乎仅在存在工作流定义时运行。但是,我想知道是否有一种方法可以使用网络钩子或其他方法来欺骗系统执行我想要的操作。

我的下一个最佳选择可能是使用workflow_dispatch

github-actions

6
推荐指数
1
解决办法
1804
查看次数

标签 统计

apache-flink ×2

github-actions ×1

java ×1

jvm ×1

kryo ×1

linux ×1