对于我的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内存分配后崩溃.
我不明白
第二次实验
我将ByteBuffer.allocateDirect更改为ByteBuffer.allocate,以便在堆内存而不是本机内存中进行分配.
import java.nio.ByteBuffer; …Run Code Online (Sandbox Code Playgroud) 我已经编写了测试程序来测试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) 当我在阅读本幻灯片中有关延迟公平调度的内容时,我对Hadoop中的"作业调度"和"任务调度"这两个术语感到困惑.
如果我在以下假设中出错,请纠正我:
默认调度程序,容量调度程序和公平调度程序仅在用户调度多个作业时在作业级别有效.如果系统中只有单个作业,它们不起任何作用.这些调度算法构成了"作业调度"的基础
每个作业都可以有多个map和reduce任务以及它们如何分配给每台机器?如何为单个工作安排任务?"任务调度"的基础是什么?
我试图找到 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) 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)
当我以八度运行上述代码时,我在等高线图中得到同心椭圆形图形。我预计是一个同心圆的数字。这有什么问题吗?
我找不到在golang中创建一片缓冲通道的方法.我知道如何创建如下所示的无缓冲通道片
type ch chan int
channels := make([]ch,5)
Run Code Online (Sandbox Code Playgroud)