Ich kann mein ubuntu mit einer kleinen C-Applikation einfrieren...

Alexander Beck-Ratzka alexander.beck-ratzka at aei.mpg.de
Di Okt 25 12:14:39 UTC 2011


Hallo Liste,

also etwas erschrocken war ich schon, als ich mittels dieses kleinen 
Testprogramms

[snip]
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

#define NUM_THREADS     5000

void *PrintHello(void *threadid)
{
  char  *command="ls";
   long tid;
   tid = (long)threadid;
   sleep(1);
   //pthread_exit(NULL);
   system(command); // hier wget
   printf("Hello World! It's me, thread #%ld!\n", tid);
   sleep(1);
   pthread_exit(NULL);
}

int main (int argc, char *argv[])
{
   pthread_t threads[NUM_THREADS];
   int rc;
   long t;
   for(t=0; t<NUM_THREADS; t++){
      printf("In main: creating thread %ld\n", t);
      rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
      if (rc){
        printf("ERROR; return code from pthread_create() is %d; error code: 
%s\n", rc, strerror(rc));
         exit(-1);
      }
   }
   sleep(30);
   pthread_exit(NULL);
}

testen wollte, wieviele pthreads (P=POSIX) ich parallel öffnen kann. 
pthread_create liefert im Fehlerfalle einen rc !=0 zurück, der einem errno 
entspricht.

Was soll ich sagen: es werden anstandslos die 5000 Threads gestartet, und dann 
friert mein System ein, nur noch ausschalten hilft, nicht einmal die Magic-
Keys funktionieren.

Die Manpage zu pthread_create sagt aus:

[snip]
ERRORS:

 EAGAIN Insufficient  resources  to  create  another  thread, or a system-
imposed limit on the number of threads was encountered.  The latter case may 
occur in two ways: the   RLIMIT_NPROC soft resource limit (set via 
setrlimit(2)), which limits the number of process for a real user ID, was 
reached; or the kernel's system-wide limit on the  number of threads, 
/proc/sys/kernel/threads-max, was reached.
[snip]

leztere , also /proc/sys/kernel/threads-max liegt bei 126601

Es ist also recht einfach ein ubuntu 11.04 (das Release benutze ich) zum 
Erliegen zu bringen. Ich habe die Systemvoreinstlelungen nicht modifiziert. 
Eigentlich hätte ich erwartet, dass es ein Thread-Limit gibt, welches schon 
lange bevor  das Syssten einfriert, erreicht wird.

Liebe Grüße

Alexander
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <https://lists.ubuntu.com/archives/ubuntu-de/attachments/20111025/a3dbc4b7/attachment.html>


Mehr Informationen über die Mailingliste ubuntu-de