mysql mit 4g ram: InnoDB: Error: pthread_create returned 12
mysql mit 4g ram: InnoDB: Error: pthread_create returned 12
ich benutze kernel 2.6.8-2-686-smp. wenn ich ich die option innodb_buffer_pool_size nahe der 2gb grenze einstelle, kommt oben genannter fehler.
gibt es eine 2 gb grenze? wenn ja, welche möglichkeiten habe ich trotzdem den speicher zu nutzen?
DANKE
gibt es eine 2 gb grenze? wenn ja, welche möglichkeiten habe ich trotzdem den speicher zu nutzen?
DANKE
Hallo,
bei Google habe ich einen Beitrag [1] gefunden, vielleicht hilft der dir ja weiter. Dort hat jemand die selbe Fehlermeldung - nur halt bei Oracle. Grund ist dort eine Beschränkung der Anzahl an Threads bzw. die Stackgröße.
€: Schau dir mal ulimit an bzw. /etc/security/limits.conf.
Salgar
[1] http://www.linuxquestions.org/questions ... 5/4/307239
bei Google habe ich einen Beitrag [1] gefunden, vielleicht hilft der dir ja weiter. Dort hat jemand die selbe Fehlermeldung - nur halt bei Oracle. Grund ist dort eine Beschränkung der Anzahl an Threads bzw. die Stackgröße.
€: Schau dir mal ulimit an bzw. /etc/security/limits.conf.
Salgar
[1] http://www.linuxquestions.org/questions ... 5/4/307239
leider scheint das bei mir nicht das problem zu sein... die thread zahl ist realtiv klein (vorallem beim start, wo der fehler auftritt)
habe die stackgrösse verkleinert - was nichts bewirkte....
mich würd interessieren ob ein thread vielleicht nur bis 2 GB benutzen kann? gibt es hier experten zu diesen thema? habe nur beim suchen einer lösung etwas mit glibc und linuxthreads gefunden - allerdings leider keinen direkten hinweis das es eine beschränkung gibt!?
habe die stackgrösse verkleinert - was nichts bewirkte....
mich würd interessieren ob ein thread vielleicht nur bis 2 GB benutzen kann? gibt es hier experten zu diesen thema? habe nur beim suchen einer lösung etwas mit glibc und linuxthreads gefunden - allerdings leider keinen direkten hinweis das es eine beschränkung gibt!?
Hallo MasterLR,
wie ist deine max_memory_size gesetzt?
Bei mir ist die
Wenn das passt kannst du schonmal davon ausgehen, dass die Beschränkung wohl irgendwo im Kernel/glibc, ... ist denke ich.
wie ist deine max_memory_size gesetzt?
Bei mir ist die
Code: Alles auswählen
max memory size (kbytes, -m) unlimited
Code: Alles auswählen
# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
Hm, schreib doch mal ein kleines C-Programm was per malloc große RAM-Mengen alloziert. Der Fehler kommt ja von pthread - also ist das vielleicht nur eine Folgeerscheinung (RAM voll, irgendwas, ... ). Dann kannst du kontrollieren ob es wirklich ein 2 GB Limit gibt pro malloc/Prozess. Ich habe im Archiv einer Mailingliste etwas von 3GB Limit pro Prozess gehört bei 4GB RAM. Leider findet man keine verlässlichen und eindeutigen Infos dazu.
Ich selbst habe leider nicht allzu viel Erfahrung dabei - 2GB RAM sind z.Z. das höchste der Gefühle bei mir
Salgar
Ich selbst habe leider nicht allzu viel Erfahrung dabei - 2GB RAM sind z.Z. das höchste der Gefühle bei mir
Salgar
Hallo,
der Mensch ist ja von Natur aus faul - das hier habe ich bei Google gefunden:
Datei: malloctest.c
Übersetzen mit
Ausführen mit
Du kannst ja mal ein bisschen mit der Zahl (3000000000) spielen und die Grenzen austesten.
Salgar
der Mensch ist ja von Natur aus faul - das hier habe ich bei Google gefunden:
Datei: malloctest.c
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
int main() {
void *buf = malloc ( (size_t) (3000000000u) ); // genau 3 GB
if (buf==0) printf("oh no\n"); else printf("yeah\n");
return 0;
};
Code: Alles auswählen
gcc -o malloctest malloctest.c
Code: Alles auswählen
./malloctest
Salgar
Dann fehlt wohl das Executable-Flag bei den Berechtigungen der erzeugten ausführbaren Datei. Probier mal und ruf das Programm anschließend auf. Sollte dann funktionieren.
Salgar
Code: Alles auswählen
chmod 700 malloctest
Salgar
So, habe das gerade auf meinem Debian-Server probiert - da geht alles einwandfrei:
Ausgabe: oh no
Code: Alles auswählen
mkdir malloctest
cd malloctest/
echo '#include <stdio.h>
#include <stdlib.h>
int main() {
void *buf = malloc ( (size_t) (3000000000u) ); // genau 3 GB
if (buf==0) printf("oh no\n"); else printf("yeah\n");
return 0;
};' > malloctest.c
gcc -o malloctest malloctest.c
./malloctest
komme der sache anscheinend näher
wenn ich nun
ausführe, ändert sich der wert
nun kann ich das test programm mit 3GB erfolgreich laufen lassen -> frage ist nun: kann ich diesen wert so wie oben gefahrlos ändern?
Code: Alles auswählen
ipcs -l
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 32768
max total shared memory (pages) = 2097152
min seg size (bytes) = 1
...
Code: Alles auswählen
echo "3097152" > /proc/sys/kernel/shmall
Code: Alles auswählen
ipcs -l
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 32768
max total shared memory (pages) = 3097152
min seg size (bytes) = 1
...
Zuletzt geändert von MasterLR am 13.09.2005 10:27:26, insgesamt 1-mal geändert.
2GB ist wohl wirklich eine Grenze in der glibc, genauer bei malloc.
Mehr dazu findest du hier: http://www.daimi.au.dk/~kasperd/comp.os ... APPED_BASE
Das ist wohl das, was oben im howto als Workaround bezeichnet wird
Mehr dazu findest du hier: http://www.daimi.au.dk/~kasperd/comp.os ... APPED_BASE
€: Habe deinen Beitrag nicht gelesen gehabt.How do I use more than 2GB of virtual memory in one process?
The only real solution to your problem is using a 64bit architecture, but there are workarounds that will help you. [...]
Das ist wohl das, was oben im howto als Workaround bezeichnet wird
Zuletzt geändert von Salgar am 13.09.2005 10:35:15, insgesamt 1-mal geändert.
siehe mein letzten beitragSalgar hat geschrieben:2GB ist wohl wirklich eine Grenze in der glibc, genauer bei malloc.
Mehr dazu findest du hier: http://www.daimi.au.dk/~kasperd/comp.os ... APPED_BASEHow do I use more than 2GB of virtual memory in one process?
The only real solution to your problem is using a 64bit architecture, but there are workarounds that will help you. [...]
Keine Ahnung ob man den Wert gefahrenlos ändern kann.
Du kannst ihn anscheinend aber über die Datei /etc/sysctl.conf permanent ändern.
Du kannst ihn anscheinend aber über die Datei /etc/sysctl.conf permanent ändern.
Code: Alles auswählen
kernel.shmall = 2097152
Code: Alles auswählen
mysqld[2595]: InnoDB: Error: pthread_create returned 12
nur komisch das er sich mit den entsprechenden parametern nicht "überreden" lässt :-/
- feltel
- Webmaster
- Beiträge: 10458
- Registriert: 20.12.2001 13:08:23
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Leipzig, Germany
-
Kontaktdaten:
Der mysqld wird gegen die Standardeinstellungen compiliert sein und die daher benutzen. Ich hatte vor ein paar Jahren ein ähnliches Problem mit Squid und Max-Open-Files. Das ließ sich nur umgehen indem man den Wert via /proc hochsetzte und dann den Squid neu compilierte.
debianforum.de unterstützen? Hier! | debianforum.de Verhaltensregeln | Bitte keine Supportanfragen per PM
zurzeit kann ich mysql nicht kompilieren (fehlende zeit -> noch nie gemacht).... bevor ich diese monströse aufgabe angehen würde - wäre ich gern sicher das es daran liegt *ggg*
könnte man das eigentlich in einer vmware simulieren -> in dieser gäbe es nicht echte 4gb ram (da vmware auf arbeitsmaschine läuft) aber wenn ich genügend swap bereitstellen würde - müsste das doch gehen oder?
hat jemand erfahrung beim kompilieren von mysqld? kann mir jemand sagen _wie_ aufwendig die sache ist? alles mit debian bordmittel möglich? ich müsste es in vmware bzw. einer anderen maschine kompilieren als direkt auf server (schon allein aus sicherheitsgründen)
könnte man das eigentlich in einer vmware simulieren -> in dieser gäbe es nicht echte 4gb ram (da vmware auf arbeitsmaschine läuft) aber wenn ich genügend swap bereitstellen würde - müsste das doch gehen oder?
hat jemand erfahrung beim kompilieren von mysqld? kann mir jemand sagen _wie_ aufwendig die sache ist? alles mit debian bordmittel möglich? ich müsste es in vmware bzw. einer anderen maschine kompilieren als direkt auf server (schon allein aus sicherheitsgründen)
- feltel
- Webmaster
- Beiträge: 10458
- Registriert: 20.12.2001 13:08:23
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Leipzig, Germany
-
Kontaktdaten:
Stell sicher das deb-src-Einträge in der /etc/apt/sources.list vorhanden sind und dann mach einfach ein
Nach ner ganzen Weile sollte dann ein mysql-server-VERSION.deb entstehen.
Code: Alles auswählen
apt-get install build-essential
apt-get build-dep mysql-server
apt-get -b source mysql-server
debianforum.de unterstützen? Hier! | debianforum.de Verhaltensregeln | Bitte keine Supportanfragen per PM
also wenn das so einfach geht - denn fall ich vom stuhlfeltel hat geschrieben:Stell sicher das deb-src-Einträge in der /etc/apt/sources.list vorhanden sind und dann mach einfach einNach ner ganzen Weile sollte dann ein mysql-server-VERSION.deb entstehen.Code: Alles auswählen
apt-get install build-essential apt-get build-dep mysql-server apt-get -b source mysql-server
und ich glaub ich werde mich in debian verlieben *gggg*
habe vor jahren ein paar sachen unter linux (nicht debian) kompiliert und es war grausam