it-swarm.com.de

Warum nehmen Buf / Cache so viel RAM und nicht Stück

Also habe ich gerade mein neues Ubuntu 16.04 mit allem Nötigen installiert, um mit der Programmierung zu beginnen. Aber jetzt habe ich ein großes Problem mit dem RAM. Ich kann nicht mehr Anwendungen öffnen, die ich auf meinem vorherigen Notebook mit Linux 12.04 habe, das die Hälfte meines aktuellen Speichers hat. Mein 1 Problem ist mit Prozess XORG:

 1040 root      20   0 2403428 1,091g 1,014g S  21,9  7,1 247:35.70 Xorg                                                                                                                   

es dauert so viel RAM nach einem Tag mit meinem Notebook. Das zweite Problem betrifft Buff/Cache, die immer mehr als 2 GB benötigen. Ich lese this und sie erklären, dass dies klumpen sollte, wenn mein System es benötigt. Mein aktueller Status ist also:

KiB Mem : 16063252 total,  2044612 free, 11033624 used,  2985016 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  2778236 avail Mem 

Also ich habe noch gerne 2GB frei.

jetzt beginne ich eines meiner größeren Projekte zu kompilieren. Wenn free nahe bei 0 liegt, stürzt der Kompilierungsprozess ab, da er keinen freien Arbeitsspeicher hat:

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-surefire-plugin:2.16:test (surefire-itest) on project my-project: Execution surefire-itest of goal org.Apache.maven.plugins:maven-surefire-plugin:2.16:test failed: The forked VM terminated without saying properly goodbye. VM crash or System.exit called ?
[ERROR] Command was/bin/sh -c cd /my-project && /usr/lib/jvm/Java-8-Oracle/jre/bin/Java -Dfile.encoding=UTF-8 -jar my-project/target/surefire/surefirebooter8879869524337464183.jar my-project/target/surefire/surefire5896025025928619492tmp my-project/target/surefire/surefire_21839336642879397359tmp

dies ist ein paar Sekunden vor dem Absturz:

KiB Mem : 16063252 total,   178808 free, 13693208 used,  2191236 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   191788 avail Mem 

ja, der freie und verfügbare Speicher liegt nahe bei 0, aber es sind immer noch etwa 2 GB im Buff/Cache. Warum verwendet Linux/Java diesen Speicher nicht? Gibt es eine Möglichkeit, wie ich meine aktuelle Speichernutzung optimieren kann?

2
hudi

Ihr Compiler wird in einer Java VM ausgeführt, die standardmäßig auf 1 GB begrenzt ist, unabhängig davon, wie viel Speicherplatz Sie zur Verfügung haben. Versuchen Sie, den Befehl Java mit -Xmx2G um sicherzustellen, dass es doppelt so viel zurückgewinnen kann, und zögern Sie nicht, diese Zahl weiter zu erhöhen, wenn dies nicht ausreicht. Beachten Sie, dass eine Größe von mehr als 2 GB nicht hilfreich ist, wenn Sie eine 32-Bit-Version von Java (in Anbetracht des von Ihnen verwendeten Systems unwahrscheinlich) verwenden.

2

Der von Cache/Puffern verwendete Speicher ist nicht Ihr Problem, da er nach Bedarf freigegeben wird. Siehe this.

Eine Möglichkeit:

Wie Dmitry darauf hinweist, ist es wahrscheinlich, dass Ihr Java VM) auf Sie abstürzt. Um seine Antwort ein wenig zu erweitern, gibt es ein Einige beteiligte Switches, die die anfängliche und maximale Größe des für Ihre Java= VM verfügbaren Speicherzuweisungspools angeben. Unten ist ein Auszug aus der Java-Manpage

-Xmsn               Specifies the initial size of the memory allocation
                           pool.   This  value  must  be  a  multiple  of 1024
                           greater than 1 MB.  Append the letter  k  or  K  to
                           indicate  kilobytes,  the letter m or M to indicate
                           megabytes, the letter g or G to indicate gigabytes,
                           or  the  letter  t or T to indicate terabytes.  The
                           default value is 2MB. Examples:

                           -Xms6291456
                           -Xms6144k
                           -Xms6m

       -Xmxn               Specifies the maximum size, in bytes, of the memory
                           allocation  pool.  This value must be a multiple of
                           1024 greater than 2 MB.  Append the letter k  or  K
                           to  indicate  kilobytes, the letter m or M to indi-
                           cate megabytes, the letter g or G to indicate giga-
                           bytes,  or the letter t or T to indicate terabytes.
                           The default value is 64MB. Examples:

                           -Xmx83886080
                           -Xmx81920k
                           -Xmx80m

Abhängig von der Plattform, auf der Sie ausgeführt werden, gibt es auch einige Unterschiede.

                       On Mac OS X platforms, the  upper  limit  for  this
                       value when running in 32-bit mode (-d32) is approx-
                       imately 2100m minus overhead amounts, and  approxi-
                       mately  127t minus overhead amounts when running in
                       64-bit mode (-d64).  On Solaris  7  and  Solaris  8
                       SPARC  platforms, the upper limit for this value is
                       approximately  4000m  minus  overhead  amounts.  On
                       Solaris  2.6  and x86 platforms, the upper limit is
                       approximately  2000m  minus  overhead  amounts.  On
                       Linux  platforms,  the upper limit is approximately
                       2000m minus overhead amounts.

Eine andere Möglichkeit:

Ich stelle auch fest, dass Sie keinen Swap aktiviert haben. Wenn es sich also nicht um die VM handelt, schauen Sie sich vielleicht this an, um festzustellen, ob Sie Swap aktivieren müssen.

Wenn Sie 14.04 und nicht 16.04 ausführen, wie in Ihrem Beitrag angegeben, sind Sie möglicherweise von diesem Fehler oder vielleicht - betroffen. dieser

Wenn Sie 16.04 ausführen und Xorg einen Speicherverlust aufweist, der möglicherweise Ihr Problem verursacht dieser Fehler ist aufgrund einer Regression erneut aufgetreten. In diesem Fall sollten Sie dies auf Launchpad melden

Quelle: http://www.manpagez.com/man/1/Java/

0
Elder Geek