Speicherproblem bei Threadstarts



  • Hallo!

    Ich hatte mal zum Testen die Anzahl der maximalen Threads mit echo 100000 > /proc/sys/kernel/threads-max auf 100000 hochgesetzt und die Anzahl getestet. Gestartet wurden ca. 380 Threads. Anschließend gab trotz Rücksetzen auf 16383 und Serverneustart auch das folgende Programm nur 381 Threads aus und gibt ab dem 382. Thread die Fehlermeldung 12 Cannot allocate Memory aus:

    #include <iostream>
    #include <pthread.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <string.h>
    #include <errno.h>
    
    #define NUM_THREADS 2000
    
    using namespace std;
    
    void *io(void *t){
      int *i=reinterpret_cast<int *>(&t);
      cout << "Thread - Nummer: " << *i << endl;
    }
    
    int main(){
    int t,rc;
    pthread_t threads[NUM_THREADS];
    
    for(t=0; t<NUM_THREADS; t++){
      rc = pthread_create(&threads[t], NULL, io, (int *) t);    
      if(rc!=0){
        cout << t << " ERROR; return code from pthread_create() is " << errno << "   " << strerror(errno) << endl;
      }
    }
    sleep(10);
    }
    

    Was kann ich tun, bzw. was hab ich falsch gemacht? Wurden durch das Hochsetzen irgendwelche Speichereinstellungen geändert? 😞

    Vielen Dank für eure Hilfe + viele Grüße,
    Marc



  • Ist dir klar, dass jeder Thread Speicher für seinen Stack benötigt? Der Defaultwert für die Stackgröße liegt AFAIK bei 1 MByte.



  • hmm, und abgesehen davon ist die übergabe der zahl, also von t relativ sinnfrei, da das ganze ja verändert werden könnte, während du dran rum werkelst, d.h. die Zahlen, die du ausgibst, müssen auch nicht unbedingt der realität entsprechen. das hat natürlich mit dem eigentlichen problem nichts zu tun, ist aber auch noch zu bedenken



  • Hi ihr!

    Er hat ja vorher auch fast 18000 Threads mit dem gleichen Code geöffnet, am Stack kann es also nicht liegen. Das mit der Übergabe des t sollte auch keine Rolle spielen, nur einen Anhaltswert liefern.

    Das Problem ist weiterhin das Gleiche - warum werden nur 381 Threads (zu vprher 18000) geöffnet und dann ein Speicherproblem angezeigt?

    Liebe Grüße, Marc


Anmelden zum Antworten