[JAVA] Ich habe mir die Ressourcen der Azure Container-Instanz angesehen

Lesen Sie den Artikel Dive to Java (@YaSuenag, @sugarlife) in Web + DB Press Vol.106, in dem Sie die Steuerung von cgroup-Ressourcen über die JVM in Java 8 nicht sehen können (Sie können Ressourcen in Java 10 steuern). Ich wollte es auf Azure (ACI) versuchen, also habe ich es versucht.

Container erstellen

Ich werde verschiedene Dinge tun, also werde ich eine Instanz erstellen, die sich mit SSH verbindet. Auf der Suche nach Docker Hub habe ich mir das Bild von [hier] ausgeliehen (https://hub.docker.com/r/rastasheep/ubuntu-sshd/). Bitte beziehen Sie sich auf den Link für das Root-Passwort usw., wenn Sie es verwenden.

Stellen Sie den Container in der Azure Cloud Shell bereit.

$ az group create --name con01 --location eastus
$ az container create --resource-group con01 --name con01 --image rastasheep/ubuntu-sshd --dns-name-label con01 --ports 22

Stellen Sie eine Verbindung mit SSH her und installieren Sie Java 8.

# apt-get update
# apt-get install openjdk-8-jre
# apt-get install openjdk-8-jdk

# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-0ubuntu0.18.04.1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
# javac -version
javac 1.8.0_181

Wenn Sie es mit default-j ** installieren, ist Java 10 enthalten.

# apt-get install default-jre
# apt-get install default-jdk

# java -version
openjdk version "10.0.2" 2018-07-17
OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.2)
OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.2, mixed mode)
# javac -version
javac 10.0.2

Kompilieren Sie den enthaltenen Beispielcode.

public class Main {
  public static void main(String[] args){
    Runtime rt = Runtime.getRuntime();
    System.err.format("VERSION : %s%nCPU : %d processors%nHeap : %s%n",
                      System.getProperty("java.version"),
                      rt.availableProcessors(),
                      humanRedable(rt.maxMemory()));
  }

  private static String humanRedable(long bytes){
    int unit = 1024;
    int exp = (int) (Math.log(bytes) / Math.log(unit));
    return String.format("%4.1f %sB",
                         bytes/Math.pow(unit,exp),
                         " KMGTPEZY".charAt(exp));
  }
}

Wenn du rennst ...

# javac -cp . Main.java
# java -cp . Main
VERSION : 1.8.0_181
CPU : 1 processors
Heap : 464.0 MB

Das? 1 Prozessoren? Etwas Unerwartetes. Ich hatte erwartet, dass es etwas größer wird. Oh ja. Ist der Container-Host selbst 1 Core?

Werfen wir einen Blick auf / proc / cpuinfo.

# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz
stepping        : 2
microcode       : 0xffffffff
cpu MHz         : 2397.214
cache size      : 30720 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 15
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single kaiser fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips        : 4794.42
clflush size    : 64
cache_alignment : 64
address sizes   : 44 bits physical, 48 bits virtual
power management:

Hmmm, es ist ein Kern. Wenn man sich hier ansieht, scheint es, dass die Einschränkungen auf der Seite des Containerhosts gut festgelegt werden können, aber in diesem Fall sollte man sich die Verfügbarkeit ansehen. Und ist es die Zählung ab dem Startzeitpunkt des Containers?

In der Umgebung ca. 15 Minuten nach dem Start

# cat /proc/uptime
5132.17 4473.34

Es war so, also schien es nicht von Anfang an gezählt zu werden.

Ich frage mich also, ob der ursprüngliche Container-Host 1 Core ist.

Wenn Sie falsch denken, weisen Sie bitte darauf hin: bow_tone1:

Das Ergebnis war etwas anders als ich es mir vorgestellt hatte, aber ich bin froh, dass ich es gelernt habe.

Recommended Posts

Ich habe mir die Ressourcen der Azure Container-Instanz angesehen
Ich habe einen Blick in die Java HashMap geworfen
Werfen wir einen Blick auf den Bildschirm von Quant Analyzer!
Ein kurzer Blick auf das Monty Hall-Problem
Werfen wir einen Blick auf die Funktionen der Keycloak-Verwaltungskonsole (Administrator Edition).
Ich habe ein Sequenzdiagramm des j.u.c.Flow-Beispiels geschrieben
Ich erinnerte mich an Tribuo, das von Oracle veröffentlicht wurde. Tribuo - Eine Java-Vorhersagebibliothek (v4.0)
Werfen wir einen Blick auf die Funktionen der Keycloak-Verwaltungskonsole (User Edition), dem Benutzerkontodienst
Ich habe mir kurz angesehen, wie die Javascript-Oberfläche von WebView bei Verwendung von OkHttp aufgerufen wird.
Schauen wir uns das Verfahren zum Starten der Hotspot-JVM an
Warum einen Zeilenumbruch am Ende der Datei einfügen?
Ich habe die beiliegende Instanz untersucht.
Rufen Sie in Spring Boot eine Proxy-Instanz der Komponente selbst ab
[Java] Schauen wir uns die Switch-Ausdrücke (Vorschau) von JDK 13 an.
Ich habe versucht, die Cache-Funktion des Application Container Cloud Service zu verwenden
Ich habe ein Juwel gemacht, um den Text des Org-Modus in Qiita zu posten
Ich habe ein Tool erstellt, um den Unterschied zwischen CSV-Dateien auszugeben
Ein kurzer Rückblick auf Java in den letzten fünf Jahren
Ich habe die Quelle von Integer gelesen
Ein Memorandum über das FizzBuzz-Problem
Ich habe die Quelle von Long gelesen
Ich habe die Quelle von Short gelesen
Ich habe die Quelle von Byte gelesen
Ich habe die Quelle von String gelesen
Eine nette Problemumgehung, wenn "eine Instanz einer der beiden Klassen vorhanden ist"
Ich habe versucht, die Routensuchmaschine (OSRM) einfach mit einem Container auszuführen
So ändern Sie den Wert einer Variablen an einem Haltepunkt in IntelliJ