Here is proof:
[a@a-lnx ~]$ cat thread_test.c
#include pthread.h
#include string.h
#include stdio.h
#include stdlib.h
#include unistd.h
#include errno.h
#include ctype.h
static void *
thread_start(void *arg)
{
long int n = (long int) arg;
sleep(10000000);
printf("Thread %d: exited\n", n);
return 0;
}
int
main(int argc, char *argv[])
{
long int i;
/* Create threads until get error */
for (i=0; ; i++) {
if (pthread_create(malloc(sizeof(pthread_t)), NULL, &thread_start, (void*)i) != 0)
{
printf("Error after %d threads\n", i);
exit(i);
}
}
exit(EXIT_SUCCESS);
}
[a@a-lnx ~]$ gcc -pthread thread_test.c
[a@a-lnx ~]$ ./a.out
Error after 906 threads
[a@a-lnx ~]$ ulimit -u
1024
[a@a-lnx ~]$ ulimit -u 2000
[a@a-lnx ~]$ ./a.out
Error after 1883 threads
So make sure it is set high enough, otherwise MySQL can generate 'Cannot create thread' errors.
Since this limit applies to user (not to process), this parameter is especially important if multiple mysql instances are running (with the same user).
No comments:
Post a Comment