Soweit ich das beurteilen kann, gibt es vier Möglichkeiten:
Ubuntu begrenzt den Speicher pro Prozess nicht standardmäßig, aber es gibt Möglichkeiten, diese Grenzwerte festzulegen. Der einfachste Weg, um zu wissen, was getan wurde (wenn überhaupt), besteht darin, die Person zu konsultieren, die den Server verwaltet.
Wenn Sie sich auf einem VPS und nicht auf einem tatsächlichen Server befinden, liegt möglicherweise ein Problem mit der Konfiguration der VM vor.
Ich weiß nicht genau, wie Java funktioniert, aber C beschränkt den verfügbaren Arbeitsspeicher beim Kompilieren. In diesem Fall können Sie den Compiler entweder anweisen, die Stapelgröße zu erhöhen, oder größere Arrays auf den Heap verschieben.
Wenn Ihr Betriebssystem 32 Bit umfasst, ist der verfügbare Speicher pro Prozess stark eingeschränkt (zwischen 2 GB und 4 GB). Wenn Ihr Server über eine 64-Bit-CPU verfügt, kann dies leicht durch die Installation eines 64-Bit-Betriebssystems behoben werden.
Möglichkeit 4 ist ziemlich leicht auszuschließen. Um zu überprüfen, ob es 1, 2 oder 3 ist, können Sie Folgendes mit gcc kompilieren (oder das Äquivalent in Java schreiben):
#include <stdlib.h> #include <string.h> int main(int argc, char **argv) { long bytes = atol(argv[1]), counter, *pointer, words = bytes / sizeof(long); // try to allocate memory if ((pointer = malloc(bytes)) == NULL) { puts("Could not allocate memory"); exit(1); } // play with memory, so compiler won't optimize allocation out for(counter = 0; counter < words; counter++) pointer[counter] = counter; exit(0); }
und führen Sie es so viel Speicher aus, wie Sie als Befehlszeilenoption zuweisen möchten.
Sie sollten in der Lage sein, allen gemeldeten Speicher als frei oder zwischengespeichert zu reservieren. Wenn möglich, schließen Sie Möglichkeit 1 und möglicherweise 2 aus.