小编GoT*_*GoT的帖子

为Java应用程序设置MaxDirectMemory和MaxHeapMemory

对于我的Java应用程序,我试图使用命令行选项限制堆内存和直接内存使用.

当我试图了解有关Java应用程序内存布局的更多信息时,我遇到了以下VMware 文章.

从文章中,我假设-Xmx设置可用于限制堆使用,而MaxDirectMemory设置可用于限制堆外的本机内存(图中的Guest OS Memory).但是,当我运行一个简单的程序时,结果会有所不同.我使用ByteBuffer.allocateDirect分配本机内存,而ByteBuffer.allocate分配heapmemory.

它是64位处理器(OSX)和64位JVM.

第一次实验

import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Paths;
import java.nio.file.Path;
import java.util.*;

public class javalimits {

    public static void main (String [] args)
            throws Exception {

            ArrayList al = new ArrayList();
            for(int i = 0; i< 100;i++) {

                    ByteBuffer bb = ByteBuffer.allocateDirect(1024 * 1024* 1024);
                    al.add(bb);
                    System.out.println(" Buffer loop "+ i);
                    Thread.sleep(500);
            }
            Thread.sleep(10000);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在没有任何选项的情况下运行上述程序时,它在3.6G的内存分配后崩溃了.当我使用"-XX:MaxDirectMemorySize = 100g"选项 "-Xms100g -Xmx100g"选项时,它在65次循环或大约65G内存分配后崩溃.

我不明白

  1. 由于我的物理内存仅为16G,为什么16G的内存分配后它没有崩溃?关于64G本机内存分配有什么特别之处?
  2. 当我使用"-Xms100g -Xmx100g"时,本机内存分配限制如何变化?我假设本机内存限制仅由选项""-XX:MaxDirectMemorySize = 100g"控制,根据我提供的链接中的上图.但是,结果不同.堆积内存设置也改变了直接内存缓冲区限制.
  3. 没有提供命令行选项时3.6G内存分配有什么特别之处?

第二次实验

我将ByteBuffer.allocateDirect更改为ByteBuffer.allocate,以便在堆内存而不是本机内存中进行分配.

import java.nio.ByteBuffer; …
Run Code Online (Sandbox Code Playgroud)

java memory memory-management heap-memory directmemory

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

SCHED_FIFO线程被Linux中的SCHED_OTHER线程抢占

我已经编写了测试程序来测试SCHED_FIFO.我已经知道线程SCHED_FIFO无法取代SCHED_OTHER.但我无法解释同一个程序多次运行时获得的结果.

/* Includes */
#include <unistd.h>     /* Symbolic Constants */
#include <sys/types.h>  /* Primitive System Data Types */ 
#include <errno.h>      /* Errors */
#include <stdio.h>      /* Input/Output */
#include <stdlib.h>     /* General Utilities */
#include <pthread.h>    /* POSIX Threads */
#include <string.h>     /* String handling */
#include <sched.h>
/* prototype for thread routine */
void print_message_function ( void *ptr );
void print_message_function1 ( void *ptr );

/* struct to hold data to be passed …
Run Code Online (Sandbox Code Playgroud)

linux pthreads scheduler preemption thread-priority

5
推荐指数
2
解决办法
6722
查看次数

Hadoop中的作业和任务调度

当我在阅读本幻灯片中有关延迟公平调度的内容时,我对Hadoop中的"作业调度"和"任务调度"这两个术语感到困惑.

如果我在以下假设中出错,请纠正我:

  1. 默认调度程序,容量调度程序和公平调度程序仅在用户调度多个作业时在作业级别有效.如果系统中只有单个作业,它们不起任何作用.这些调度算法构成了"作业调度"的基础

  2. 每个作业都可以有多个map和reduce任务以及它们如何分配给每台机器?如何为单个工作安排任务?"任务调度"的基础是什么?

java hadoop mapreduce reducers mapper

5
推荐指数
1
解决办法
3186
查看次数

去http服务器慢基准性能

我试图找到 Go 网络服务器的最大吞吐量。我在 8 核机器(Intel Xeon 2.5 Mhz)上运行 simplewebserver 并在不同的 8 核机器上运行 wrk 工具。Iperf 命令在这些机器之间显示大约 8-10Gbps。最初,我使用 apache ab 工具犯了一个错误,该工具仅提供 16k 请求/秒。问题与链接相同。现在,当我切换到 wrk 工具时,我每秒收到大约 9 万个请求,大约为 11MB/秒。

在第一台 8 核机器上,我运行 simplewebserver.go

package main

import (
   "io"
    "net/http"
    "runtime"
)

func hello(w http.ResponseWriter, r *http.Request) {
    io.WriteString(w, "Hello world!")
}

 func main() {
    runtime.GOMAXPROCS(8)
    http.HandleFunc("/", hello)
    http.ListenAndServe(":8000", nil)
 }
Run Code Online (Sandbox Code Playgroud)

在不同的 8 核机器上,我跑了

 ./wrk -t8 -c1000 -d10s http://10.0.0.6:8000/
Run Code Online (Sandbox Code Playgroud)

结果:

Running 10s test @ http://10.0.0.6:8000/
8 threads and 1000 connections
Thread Stats …
Run Code Online (Sandbox Code Playgroud)

performance webserver http go

5
推荐指数
1
解决办法
8999
查看次数

倍频程等值线图

x = linspace(-10, 10, 100);
y = linspace(-10, 10, 100);

[X,Y] = meshgrid(x, y);

t2= X.^2 + (Y.^2);

contour(x,y,t2,'showtext','on');
Run Code Online (Sandbox Code Playgroud)

当我以八度运行上述代码时,我在等高线图中得到同心椭圆形图形。我预计是一个同心圆的数字。这有什么问题吗?

matlab octave contour matlab-figure

2
推荐指数
1
解决办法
2560
查看次数

在golang中创建一片缓冲通道

我找不到在golang中创建一片缓冲通道的方法.我知道如何创建如下所示的无缓冲通道片

type ch chan int
channels := make([]ch,5)
Run Code Online (Sandbox Code Playgroud)

channel go buffered

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