我正在做一些用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) 我想从IDE本地启动它时访问Flink Web界面.
我需要这个,因为我想访问Flink的计数器(累加器).
使用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一起玩?
我正在尝试构建一个存储库,它允许我为我正在分叉的项目的不同版本构建 Docker 映像。存储库应具有以下布局:
main定义工作流的分支,带有触发器,例如:
on:
push:
branches-ignore:
- main
Run Code Online (Sandbox Code Playgroud)
该工作流程从任何分支构建软件(基本上是mvn clean package,docker build并且docker push适用于软件的所有版本)software-1.2.3不包含任何.github/workflow文件的分支(将此文件复制到每个分支并在那里维护会很麻烦)从我迄今为止的研究来看,GitHub Actions 似乎仅在存在工作流定义时运行。但是,我想知道是否有一种方法可以使用网络钩子或其他方法来欺骗系统执行我想要的操作。
我的下一个最佳选择可能是使用workflow_dispatch,