我有一个帮助程序,试图从S3进行线程下载.很多时候(大约1%的请求)我得到一条关于a的日志消息,一段NoHttpResponseException时间之后导致SocketTimeoutException从中读取S3ObjectInputStream.
我做错了什么,还是仅仅是我的路由器/互联网?或者这是S3的预期?我没有注意到其他地方的问题.
public void
fastRead(final String key, Path path) throws StorageException
{
final int pieceSize = 1<<20;
final int threadCount = 8;
try (FileChannel channel = (FileChannel) Files.newByteChannel( path, WRITE, CREATE, TRUNCATE_EXISTING ))
{
final long size = s3.getObjectMetadata(bucket, key).getContentLength();
final long pieceCount = (size - 1) / pieceSize + 1;
ThreadPool pool = new ThreadPool (threadCount);
final AtomicInteger progress = new AtomicInteger();
for(int i = 0; i < size; i += pieceSize)
{ …Run Code Online (Sandbox Code Playgroud) 各种客户端/目标/elb 重置计数指标的文档 ( TCP_Client_Reset_Count,TCP_Target_Reset_Count , TCP_ELB_Reset_Count)只是说它们对 RST 数据包进行计数。我试图了解什么是 RST 数据包,它似乎与断开的 TCP 连接有关。我的负载均衡器有一个长期的、看似成功的客户端连接。为什么我看到每小时 100 次客户端重置?我还看到每小时大约 10 次负载均衡器重置,以及 0 次目标重置。
编辑:我刚刚观察到增加服务器实例的大小(我使用的是 Farscape——将 0.25 个 vCPU 增加到 0.5)导致每小时客户端重置减少 10 倍。负载平衡器重置的次数没有改变。
我的应用程序需要 Java 和文件系统之间有一个层,以明确文件系统仅包含所有文件(存储在 S3 上)的子集这一事实。该层必须执行许多普通文件 IO 的操作,即打开文件、锁定文件以进行读/写等,但在打开时它可能需要下载文件并逐出已关闭的文件。我需要的另一个功能是,如果文件被锁定以进行读/写,则打开调用可以解锁该文件并关闭现有流(即,踢掉其他用户)。另一个是临时文件的管理。
有没有什么类似的开源软件,或者我只需要卷起袖子就可以了?我应该从头开始,还是应该利用 java IO 中的一些钩子?
我有以下代码不能按我的意图工作(跳过一个随机行,而不是第一个):
Files.lines(path)
.skip(1)
.parallel()
.forEach( System.out::println )
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,我误解了Streams的行为.问题是:我可以先将流视为顺序流(并使用"有状态中间操作"),然后将其输入并行流中forEach吗?
Get<PrimitiveType>ArrayElements系列函数被记录为复制数组,或将它们固定到位(并且这样做,防止压缩垃圾收集器移动它们).它被记录为一种更安全,限制性更小的替代方案GetPrimitiveArrayCritical.但是,我想知道哪些虚拟机和/或垃圾收集器(如果有的话)实际固定数组而不是复制它们.
我阅读了 .gitattributes 并告诉 git 不要更改一些文件的行结尾。问题是,他们已经承诺了。愚蠢而聪明的 git 现在不想撤消它所做的事情。删除并重新添加文件没有帮助(它优化了更改)。现在,每当我从存储库中提取文件时,我都必须手动重新复制这些文件。
我能做些什么?将此报告为错误并等待修复?以某种方式删除提交对象以强制 git 重新创建它们?后者似乎很困难/危险。
编辑:我在 GitHub 上找到了这个很好的指南,用于从存储库中完全删除文件。问题是,我真的不想把它从整个历史中删除。我是否必须这样做,或者我可以只在最后一次提交时这样做吗?如果我在最后一次提交时这样做,Git 会再次重新查找并优化吗?
正如你们中的一些人所知,C++允许这样做:
get( array, 5 ) = 5;
Run Code Online (Sandbox Code Playgroud)
功能get实现如下:
int& get( int* array, int index ) { return array[index]; }
Run Code Online (Sandbox Code Playgroud)
Java中有类似的东西吗?更具体地说,我想将数组索引逻辑封装在一个函数中(以高性能的方式).
ByteBuffer提供asFloatBuffer()功能.但是,没有相应的FloatBuffer.asByteBuffer()
我想做:
float[] array = ...
try( ByteChannel channel = Files.newByteChannel( path, WRITE, CREATE, TRUNCATE_EXISTING ) ) {
channel.write (FloatBuffer.wrap (array) .asByteBuffer());
}
Run Code Online (Sandbox Code Playgroud)
有没有办法有效地做到这一点,或者我不得不求助于分配ByteBuffer如下:
ByteBuffer buffer = ByteBuffer.allocate( array.length * 4 );
buffer .asFloatBuffer() .put (array);
channel.write (buffer);
Run Code Online (Sandbox Code Playgroud) 如何根据主机处理器/操作系统创建一个可在SSE,AVX和AVX2代码路径之间动态切换的库?我正在使用Agner Fog的VCL(矢量类库)并使用GCC for Linux进行编译.
我应该serialVersionUID在创建扩展Serializable 的接口时添加字段吗?
我的IDE(Netbeans 8.2)抱怨该字段丢失.但是,根据我的理解,serialVersionUID它仅适用于非抽象类(将在反序列化期间实例化的特定类).
如果 serialVersionUID有必要,我应该怎么做扩展接口的接口?通常,此类字段在类heirarchy中的每个类中声明.虽然这也适用于接口,但它会导致不同的IDE警告,即字段隐藏字段.
java ×7
amazon-s3 ×2
amazon-elb ×1
avx ×1
c++ ×1
caching ×1
file-io ×1
git ×1
intrinsics ×1
java-8 ×1
java-stream ×1
nio ×1
optimization ×1