Tutorial und Praxis zu den virtuellen Speichereinstellungen unter Linux

Tutorial und Praxis zu den virtuellen Speichereinstellungen unter Linux

Was ist virtueller Speicher?

Zunächst werde ich eine Einleitung direkt aus Wikipedia zitieren.

Virtueller Speicher ist eine Technologie zur Speicherverwaltung von Computersystemen. Dadurch wird der Anwendung vorgegaukelt, sie verfüge über kontinuierlich verfügbaren Speicher (einen kontinuierlichen und vollständigen Adressraum), tatsächlich ist dieser jedoch normalerweise in mehrere physische Speicherfragmente aufgeteilt, von denen einige vorübergehend auf einem externen Festplattenspeicher gespeichert werden, um bei Bedarf Daten austauschen zu können.

Für Variablen in der Sprache C können wir den Operator & verwenden, um ihre Adresse abzurufen. Da es sich um eine virtuelle Adresse handelt, bedeutet dies, dass diese Adresse virtuell ist.

Der virtuelle Adressmechanismus ist nicht notwendig. Bei einem einfachen Mikrocontroller muss die physische RAM-Speicherplatzverteilung beim Kompilieren des Codes angegeben werden. Es gibt kein Konzept einer virtuellen Adresse. Die Adresse bezieht sich auf die physische Adresse im RAM.

  • Virtueller Speicher (dieser wird als virtueller Speicher bezeichnet, da er sich auf den logischen Speicher und den physischen Speicher im System bezieht. Der logische Speicher ist der Speicher aus der Prozessperspektive und daher das, was Programmierer interessiert. Der physische Speicher ist der Speicher aus der Prozessorperspektive und wird vom Betriebssystem verwaltet. Man kann sagen, dass virtueller Speicher ein technisches Mittel ist, um diese beiden unterschiedlichen Perspektiven des Speichers abzubilden.) ist eine Methode zur dynamischen Speicherzuweisung bei Bedarf, die vom Betriebssystem übernommen wird. Sie ermöglicht es Programmen, unwissentlich Speicherplatz zu verwenden, der größer ist als die tatsächliche physische Größe (tatsächlich wird der vom Programm benötigte Speicherplatz in Form von Seiten im physischen Speicher und auf der Festplatte gespeichert). Daher befreit der virtuelle Speicher Programmierer vollständig. Von da an müssen sich Programmierer nicht mehr allzu viele Gedanken über die Größe und Auslastung des Programms machen. Sie können Programme frei schreiben und alle mühsamen Dinge dem Betriebssystem überlassen.
  • Die SWAP-Partition (bedeutet „Austausch“, „physischer Austausch“) ist die Linux-Swap-Partition. Seine Funktion besteht darin, dass das Betriebssystem bei unzureichendem Speicher zunächst die vorübergehend nicht verwendeten Daten im Speicher im Swap-Speicher der Festplatte speichert und so Speicher für die Ausführung anderer Programme freigibt. Wenn die angeforderten Daten nicht im Speicher vorhanden sind, generiert das System einen Seiteninterrupt und der Speichermanager überträgt dann die entsprechende Speicherseite von der Festplatte zurück in den physischen Speicher. (Es ist wichtig, den Unterschied zwischen dieser und speicherabgebildeten Dateien zu beachten. Der virtuelle Speicher oder die Swap-Partition von Linux ist ein bestimmter Bereich auf der Festplatte, nämlich Swap.) Die Swap-Partition existiert tatsächlich auf der Festplatte, aber das Linux-System kann sie als Speicher verwenden. Wenn der physische Realspeicher nicht ausreicht, kann die Swap-Partition Daten mit dem Realspeicher austauschen. Vereinfacht ausgedrückt geht es darum, einen Teil des Speicherplatzes auf der Festplatte als Reservespeicherbereich freizugeben. Obwohl die Festplatte als Speicher verwendet wird, entspricht die Geschwindigkeit immer noch der Geschwindigkeit der Festplatte.

einführen

In unserer eigenen gekauften Serverumgebung kaufen wir normalerweise 1 GB Speicher, aber wenn mehr Dinge auf dem Server installiert sind, reicht der Speicher nicht mehr aus. Dieser Artikel simuliert eine reale Situation, in der der Speicher nicht ausreicht, und zeigt, wie der virtuelle Speicher geändert werden kann, damit das System normal läuft. Unsere Umgebung hier besteht darin, eine ElasticSearch-Suchumgebung zu erstellen, aber unser Serverspeicher beträgt nur 1 GB. Im Folgenden wird gezeigt, wie der virtuelle Speicher von 1 GB auf 4 GB geändert wird.

Erstellen Sie eine ElasticSearch-Umgebung

Jetzt ist unsere Serverumgebung leer und enthält nichts. Wir laden zuerst ElasticSearch auf den Server hoch und installieren dann JDK und ElasticSearch.

Installieren Sie JDK

Das Installationstutorial wird später aktualisiert (in diesem Artikel wird hauptsächlich die Einrichtung des virtuellen Speichers vorgestellt. Die Installation dieser Dinge dient hauptsächlich dazu, einen Zustand unzureichenden Speichers zu simulieren).

Installieren Sie ElasticSearch

Der Installationslink wird später aktualisiert (in diesem Artikel wird hauptsächlich das Einrichten des virtuellen Speichers vorgestellt. Die Installation dieser Dinge dient hauptsächlich dazu, einen Zustand unzureichenden Speichers zu simulieren.)

ElasticSearch starten

Wenn Sie ElasticSearch starten, werden Sie feststellen, dass beim Start ein Fehler gemeldet wird. Der Grund dafür ist, dass der aktuelle Speicher unseres Servers nicht den von ElasticSearch benötigten Speicher erfüllen kann.

[esyonghu@localhost elasticsearch-6.4.0]$ ./bin/elasticsearch 
[1] 3228
[esyonghu@localhost elasticsearch-6.4.0]$ Java HotSpot(TM) 64-Bit Server VM-Warnung: INFO: os::commit_memory(0x000000008a660000, 1973026816, 0) fehlgeschlagen; Fehler='Speicher kann nicht zugewiesen werden' (errno=12)
#
# Es ist nicht genügend Speicher vorhanden, um die Java Runtime Environment fortzusetzen.
# Bei der nativen Speicherzuweisung (mmap) konnten 1973026816 Bytes zum Festschreiben des reservierten Speichers nicht zugeordnet werden.
# Eine Fehlerberichtsdatei mit weiteren Informationen wird wie folgt gespeichert:
# logs/hs_err_pid3228.log
[esyonghu@localhost elasticsearch-6.4.0]$

Überprüfen Sie den Speicher unseres Servers und verwenden Sie den Befehl free. Sie können sehen, dass der Speicher unseres Servers 1 GB beträgt. Zu diesem Zeitpunkt müssen wir den virtuellen Speicher ändern, um das Problem zu lösen.

[esyonghu@localhost elasticsearch-6.4.0]$ frei -m
  insgesamt genutzte freie gemeinsam genutzte Puffer im Cache
Mitglied: 980 582 397 2 23 245
-/+ Puffer/Cache: 313 667
Tauschen: 0 0 0
[esyonghu@localhost elasticsearch-6.4.0]$

Erstellen einer Auslagerungsdatei

Geben Sie das Verzeichnis /usr ein

[root@localhost usr]$ pwd
/usr
[root@localhost usr]$

Einen Swap-Ordner anlegen und eintragen

[root@localhost usr]# mkdir swap
[root@localhost usr]# cd swap/
[root@localhost swap]# pwd
/usr/swap
[root@localhost-Austausch]

Erstellen Sie eine Auslagerungsdatei. Verwenden Sie dazu den Befehl dd if=/dev/zero of=/usr/swap/swapfile bs=1M count=4096

[root@localhost swap]# dd if=/dev/zero of=/usr/swap/swapfile bs=1M count=4096
Aufgezeichnete 4096+0 Lesevorgänge Aufgezeichnete 4096+0 Schreibvorgänge 4294967296 Bytes (4,3 GB) kopiert, 15,7479 Sekunden, 273 MB/Sek. [root@localhost swap]#

Auslagerungsdatei anzeigen

Verwenden Sie den Befehl du -sh /usr/swap/swapfile, um zu sehen, dass die von uns erstellte Auslagerungsdatei 4g ist

[root@localhost swap]# du -sh /usr/swap/swapfile
4,1 G /usr/swap/Swap-Datei
[root@localhost-Austausch]

Legen Sie das Ziel auf die Swap-Partitionsdatei fest

1. Verwenden Sie den Befehl mkswap /usr/swap/swapfile, um die Auslagerungsdatei als Auslagerungspartitionsdatei festzulegen

[root@localhost swap]# mkswap /usr/swap/swapfile
mkswap: /usr/swap/swapfile: Warnung: Bootbits-Sektoren nicht löschen.
 auf der gesamten Festplatte. Verwenden Sie -f, um dies zu erzwingen.
Einrichten von Swapspace Version 1, Größe = 4194300 KiB
kein Label, UUID=5bd241ff-5375-449d-9975-5fdd429df784
[root@localhost-Austausch]

Aktivieren Sie den Swap-Bereich und aktivieren Sie die Swap-Bereichsdateien sofort

Verwenden Sie den Befehl swapon /usr/swap/swapfile

[root@localhost swap]# swapon /usr/swap/swapfile
[root@localhost-Austausch]

Verwenden Sie den Befehl free -m, um den aktuellen Speicher zu überprüfen. Sie können sehen, dass die Swap-Partition 4095 MB groß geworden ist, was 4 GB Speicher bedeutet.

[root@localhost swap]# frei -m
  insgesamt genutzte freie gemeinsam genutzte Puffer im Cache
Speicher: 980 910 70 3 8 575
-/+ Puffer/Cache: 326 654
Tausch: 4095 0 4095
[root@localhost-Austausch]

Stellen Sie den virtuellen Speicher so ein, dass er beim Start automatisch aktiviert wird, und fügen Sie den folgenden Befehl zur Datei etc/fstab hinzu

1. Öffnen Sie mit dem vim-Editor die Datei /etc/fstab

2. Fügen Sie der Datei den folgenden Inhalt hinzu

/usr/swap/swapfile2 Swap-Swap-Standardwerte 0 0

Starten Sie den Server mit dem Befehl „reboot“ neu

1. Geben Sie den Neustartbefehl ein, um neu zu starten

	[root@localhost swap]# Neustart

	Broadcast-Nachricht von [email protected]
		(/dev/pts/1) um 3:56 ...

	Das System wird JETZT zum Neustart heruntergefahren!
	[root@localhost swap]# Verbindung zu 192.168.136.142 vom Remote-Host geschlossen.
	Verbindung zu 192.168.136.142 geschlossen.
	[Vorgang abgeschlossen]

2. Überprüfen Sie nach Abschluss des Neustarts mit dem Befehl free -m, ob der aktuelle Speicher hängt.

[root@localhost swap]# frei -m
    insgesamt genutzte freie gemeinsam genutzte Puffer im Cache
Speicher: 980 910 70 3 8 575
-/+ Puffer/Cache: 326 654
Tausch: 4095 0 4095

Starten Sie ElasticSearch erneut, um zu sehen, ob der Speicherfehler weiterhin gemeldet wird.

1. Wechseln Sie zum Starten zu esyonghu (ich werde hier nicht erklären, warum wir zum Starten den Benutzer es verwenden, das ist das Wissen von Elasticsearch, hier verwenden wir Elasticsearch nur, um die Situation von unzureichendem Speicher zu simulieren). Sie können sehen, dass kein Speichermangelproblem vorliegt.

[esyonghu@localhost elasticsearch-6.4.0]$ ./bin/elasticsearch &
[1] 2898
[esyonghu@localhost elasticsearch-6.4.0]$ [2019-03-06T04:00:24,841][INFO ][oenNode ][] Initialisierung ...
[2019-03-06T04:00:24,928][INFO ][oeeNodeEnvironment ] [dMy5nR5] verwendet [1] Datenpfade, Mounts [[/ (rootfs)]], Netto nutzbarer_Speicherplatz [7,6 GB], Netto Gesamtspeicherplatz [17,3 GB], Typen [rootfs]
[2019-03-06T04:00:24,928][INFO ][oeeNodeEnvironment ] [dMy5nR5] Heap-Größe [1,9 GB], komprimierte Zeiger für gewöhnliche Objekte [true]
[2019-03-06T04:00:25,018][INFO ][oenNode ] [dMy5nR5] Knotenname abgeleitet von Knoten-ID [dMy5nR5fThaBb-Q2T0txdA]; setze [node.name] zum Überschreiben
[2019-03-06T04:00:25,018][INFO ][oenNode ] [dMy5nR5] Version[6.4.0], PID[2898], Build[Standard/tar/595516e/2018-08-17T23:18:47.308994Z], Betriebssystem[Linux/2.6.32-696.el6.x86_64/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_181/25.181-b13]
[2019-03-06T04: 00: 25,018] [Info] [Oennode] [DMY5NR5] JVM -Argumente [-xms2g, -xmx2g, -xx:+useconconconconconx: -xxxx:+useStoccuper ss1m, -djava.awt.headless = true, -dfile.encoding = utf -8, -djna.noSys = true, -xx: -omitstacktraceinfastthrow, -dio.Netty.nounsafe = true, -dio.Necy.nokeysToPaNISICE utdownhookenabled = false, -dlog4j2.Disable.jmx = true, -djava.io.tmpdir =/tmp/elasticsearch.24q3s9ae, -xx:+heaponoutofmemoryError, -xx: heapdumppath = data, -xx: -xx: ERRALE: ERRALTFILE = FEHLERFILE = LOGS/HS_RAGS , -Xx:+printgcdatestamps, -xx:+printtenuringdistribution, -xx:+printgcapplicationStopedTime, -xloggc: logs/gc.log, -xx:+usegclogFilerotation, -xx: numberOfgclogs Asticsarch -6.4.0, -des.path.conf =/home/Esyonghu/Elasticsearch -6.4.0/config, -des.distribution.flavor = default, -des.distribution.type = tar]
[2019-03-06T04:00:28,022][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [aggs-matrix-stats]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [analysis-common]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [ingest-common]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [lang-expression]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [lang-mustache]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [lang-painless]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [mapper-extras]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [parent-join]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [Percolator]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [rank-eval]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] Modul geladen [reindex]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [Repository-URL]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [transport-netty4]
[2019-03-06T04:00:28,023][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [Stamm]
[2019-03-06T04:00:28,024][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [x-pack-core]
[2019-03-06T04:00:28,024][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [x-pack-deprecation]
[2019-03-06T04:00:28,024][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [x-pack-graph]
[2019-03-06T04:00:28,024][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [x-pack-logstash]
[2019-03-06T04:00:28,024][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [x-pack-ml]
[2019-03-06T04:00:28,024][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [x-pack-monitoring]
[2019-03-06T04:00:28,024][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [x-pack-rollup]
[2019-03-06T04:00:28,024][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [x-pack-security]
[2019-03-06T04:00:28,024][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [x-pack-sql]
[2019-03-06T04:00:28,024][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [x-pack-upgrade]
[2019-03-06T04:00:28,024][INFO ][oepPluginsService ] [dMy5nR5] geladenes Modul [x-pack-watcher]
[2019-03-06T04:00:28,025][INFO ][oepPluginsService ] [dMy5nR5] Plugin geladen [analysis-ik]
[2019-03-06T04:00:28,025][INFO ][oepPluginsService ] [dMy5nR5] Plugin geladen [Analyse-Pinyin]
[2019-03-06T04:00:31,315][INFO ][oexsasFileRolesStore] [dMy5nR5] hat [0] Rollen aus der Datei [/home/esyonghu/elasticsearch-6.4.0/config/roles.yml] analysiert.
[2019-03-06T04:00:32,017][INFO ][oexmjplCppLogMessageHandler] [controller/2947] [Main.cc@109] Controller (64 Bit): Version 6.4.0 (Build cf8246175efff5) Copyright (c) 2018 Elasticsearch BV
[2019-03-06T04:00:32,495][DEBUG][oeaActionModule ] Verwenden des REST-Wrappers vom Plugin org.elasticsearch.xpack.security.Security
[2019-03-06T04:00:32,768][INFO ][oedDiscoveryModule ] [dMy5nR5] mit Erkennungstyp [zen]
[2019-03-06T04:00:33,628][INFO ][oenNode ] [dMy5nR5] initialisiert
[2019-03-06T04:00:33,628][INFO ][oenNode ] [dMy5nR5] wird gestartet ...
[2019-03-06T04:00:33,860][INFO ][oetTransportService ] [dMy5nR5] Veröffentlichungsadresse {192.168.136.142:9300}, gebundene_Adressen {[::]:9300}
[2019-03-06T04:00:33,884][INFO ][oebBootstrapChecks ] [dMy5nR5] gebunden oder veröffentlicht an eine Nicht-Loopback-Adresse, wodurch Bootstrap-Prüfungen erzwungen werden
[2019-03-06T04:00:36,995][INFO ][oecsMasterService ] [dMy5nR5] zen-disco-elected-as-master ([0] Knoten beigetreten)[, ], Grund: new_master {dMy5nR5}{dMy5nR5fThaBb-Q2T0txdA}{ldgTZ1XZSfOpda9uP4treA}{192.168.136.142}{192.168.136.142:9300}{ml.machine_memory=1028210688, xpack.installed=true, ml.max_open_jobs=20, ml.enabled=true}
[2019-03-06t04: 00: 37,003] [Info] [OecsclusterAppierservice] [DMY5NR5] NEW_MASTER {192.168.136.142:9300} {Ml.Machine_Memory=1028210688, xpack.installed = true, ml.max_open_jobs = 20, ml.enabled = true}, Grund: cluster state anwenden (von master {dmy5 {dmy5 {dmy5 {dmy5 {dmy5 {dmy5 {dmy5} {dmy5 {dmy5} {dmy5 {dmy5} {dmy5 {dmy5} {dmy5 {dmy5} {dmy5 {dmy5} {dmy5 {dmy5 {dmy5fnr5f. } oder ] Quelle [Zen-Disco-gewählte als Master ([0] Knoten) [,]]]))
[2019-03-06T04:00:37,058][INFO ][oexstnSecurityNetty4HttpServerTransport] [dMy5nR5] Veröffentlichungsadresse {192.168.136.142:9200}, gebundene_Adressen {[::]:9200}
[2019-03-06T04:00:37,058][INFO ][oenNode ] [dMy5nR5] gestartet
[2019-03-06T04:00:37,177][INFO ][owadMonitor ] versuche, die Konfiguration von /home/esyonghu/elasticsearch-6.4.0/config/analysis-ik/IKAnalyzer.cfg.xml zu laden
[2019-03-06T04:00:37,179][INFO ][owadMonitor ] versuche, die Konfiguration von /home/esyonghu/elasticsearch-6.4.0/plugins/ik/config/IKAnalyzer.cfg.xml zu laden
[2019-03-06T04:00:37,888][INFO ][oemjJvmGcMonitorService] [dMy5nR5] [gc][4] Overhead, benötigte [486 ms] zum Sammeln in den letzten [1,2 s]
[2019-03-06T04:00:38,435][WARN ][oexsasmNativeRoleMappingStore] [dMy5nR5] Cache für Realms konnte nicht geleert werden [[]]
[2019-03-06T04:00:38,469][INFO ][oelLicenseService ] [dMy5nR5] Lizenz [c91cae39-79d7-4a0e-b40b-b1918a45f80c] Modus [Testversion] - gültig
[2019-03-06T04:00:38,477][INFO ][oegGatewayService ] [dMy5nR5] hat [5] Indizes in cluster_state wiederhergestellt
[2019-03-06T04:00:38,902][WARN ][oexsasmNativeRoleMappingStore] [dMy5nR5] Cache für Realms konnte nicht geleert werden [[]]
[2019-03-06T04:00:39,106][INFO ][oecraAllocationService] [dMy5nR5] Cluster-Integritätsstatus von [ROT] auf [GELB] geändert (Grund: [Shards gestartet [[mynote2][2]] ...]).

2. Verwenden Sie nun free -m, um die Speichernutzung zu überprüfen. Sie können sehen, dass 1,7 GB Swap verwendet wurden.

[esyonghu@localhost elasticsearch-6.4.0]$ frei -m
    insgesamt genutzte freie gemeinsam genutzte Puffer im Cache
Speicher: 980 916 64 0 3 33
-/+ Puffer/Cache: 880 100
Tausch: 4095 1735 2360
[esyonghu@localhost elasticsearch-6.4.0]$

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Linux-Systemdiagnose: Speichergrundlagen im Detail
  • So überprüfen Sie die Speichernutzung unter Linux
  • Warum frisst das Linux-System meinen „Speicher“ auf?
  • Lösen Sie das Problem des gemeinsam genutzten Speichers im Linux-System
  • Linux-System zum Anzeigen von CPU, Maschinenmodell, Speicher und anderen Informationen
  • Hinweise zur Speicherverwaltung von Linux-Kernel-Gerätetreibern
  • Methoden zur Optimierung von Oracle-Datenbanken mit großen Speicherseiten unter Linux
  • Eine kurze Diskussion über den virtuellen Speicher von Linux

<<:  Zusammenfassung gängiger SQL-Anweisungen in MySQL

>>:  CocosCreator Skelettanimation Drachenknochen

Artikel empfehlen

Eine kurze Analyse des Unterschieds zwischen FIND_IN_SET() und IN in MySQL

Ich habe die Mysql FIND_IN_SET-Funktion vor einig...

MySQL Multi-Instance-Bereitstellungs- und Installationshandbuch unter Linux

Was ist MySQL Multi-Instance Einfach ausgedrückt ...

Reines CSS3 zur Erzielung einer Mouseover-Schaltflächenanimation, Teil 2

Haben Sie nach den letzten beiden Kapiteln ein ne...

Fallstudie zum Zusammenführen von JavaScript-Arrays

Methode 1: var a = [1,2,3]; var b=[4,5] a = a.con...

Detaillierte Erläuterung der grundlegenden Datentypen in mysql8.0.19

MySQL-Basisdatentypen Übersicht über gängige MySQ...

Lernen Sie die schwarze Technologie der Union-All-Verwendung in MySQL 5.7 in 5 Minuten

Leistung von „Union All“ in MySQL 5.6 Teil 1: MyS...

Spezifische Verwendung der Schnittstelle wx.getUserProfile im Applet

Kürzlich hat das WeChat Mini-Programm Anpassungen...

Super detaillierter GCC-Upgrade-Prozess unter Linux

Inhaltsverzeichnis Vorwort 1. Aktuelle gcc-Versio...

Docker-Installations- und Konfigurationsschritte für das Redis-Image

Inhaltsverzeichnis Vorwort Umfeld Installieren Er...

Vue+video.js implementiert Video-Wiedergabelisten

In diesem Artikel wird der spezifische Code von v...

Implementierung des Pycharm-Installationstutorials auf Ubuntu 18.04

Methode 1: Pycharm herunterladen und installieren...

Suchmaschinenfreie Sammlung von Website-Einträgen

1: Anmeldeeingang der Baidu-Website Website: http:...