PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verdammte Limits...



7.e.Q
22.05.06, 15:31
Ich hab keinen Bock mehr drauf, Lastsimulationen zu programmieren. Ständig stößt man an irgendwelche willkürlich gesetzte Grenzen im System......

So sind wir nun in einem Fedora Core 4 (64bit) an eine sehr eigenartige Grenze gestoßen, in der es uns nicht möglich ist, mehr als 350 SOCK_DGRAM (UDP) Sockets auf einer IP Adresse zu öffnen und darüber zu senden...

SELinux ist deaktiviert.

Ich habe das ganze jetzt mal mit folgendem "Dreizeiler" probiert:





#include <netdb.h>
#include <netinet/in.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

int
main (int argc, char *argv[])
{
struct sockaddr_in sock, work;
int wsd, sd;

socklen_t addlen;

int rv;
int reuse = 1;

for (int i = 0;; i++)
{
sd = socket (PF_INET, SOCK_DGRAM, 0);

if (sd == -1)
{
printf("Error in %i\n", i);
perror ("No socket");
exit (1);
}
sock.sin_family = AF_INET;
sock.sin_port = htons (50000);
sock.sin_addr.s_addr = inet_addr("136.1.255.7");
// setsockopt(sd, SOL_SOCKET, SO_REUSEADDR, &reuse, 4);

//rv = bind (sd, (struct sockaddr *) &sock, sizeof (struct sockaddr_in));
char bla[] = {"bla"};
rv = sendto(sd, bla, strlen(bla), 0, (struct sockaddr*)&sock, sizeof(struct sockaddr) );

if (rv == -1)
{
printf("Error in %i\n", i);
perror ("Sending");
exit (1);
}

fprintf (stdout, "Connection %d\n", i);
}
while (1);
}




Dabei steigt er trotz des Filehandle Limits (ulimit -n) von 64000 nach 28140 Sockets aus mit der Fehlermeldung "Resource Temporarily unavailable". Dies tut auch unsere Software. Allerdings schon nach 350 Sockets. :eek:



.
.
.
Connection 28136
Connection 28137
Connection 28138
Connection 28139
Error in 28140
Sending: Resource temporarily unavailable


Und diese Grenze gilt es zu knacken!

Wer kann helfen???

HEMIcuda
22.05.06, 15:59
Hast Du auch nur ansatzweise mal daran gedacht, auf einer Plattform zu fragen, wo Dir zu solchen Fragen von kompetenten Leuten geholfen werden kann? Z.B. auf diversen FC-Mailing-Listen? Nichts gegen lf.de, aber das waere echt der letzte Ort, wo ich wegen solchen Fragen fragen wuerde.

'cuda

7.e.Q
22.05.06, 16:19
Japp, selbstverständlich habe ich daran gedacht.

Aber warum sollte lf.de denn nicht helfen können? Hat mir schon oft geholfen. Und fragen kostet ja nix (außer in diesem Fall Traffic und Webspace). Dieser Fall ist nun etwas spezifisch, ja. Ich werde morgen noch gegenchecken, ob es sich in anderen Distros ähnlich verhält, aber ich bin trotzdem der Meinung, daß diese Frage hier ebenso gut platziert ist, wie in einer FC-Mailinglist. Hat jemand das versteckte Kompliment an die Community gefunden? Nein? Schade...


Ach... hähä... was ich noch vergessen habe: die Beschränkung auf 350 Socken ist pro Prozess! Also mit 2 Prozessen gehen 700 Sockets, mit 3 eben 1050 und so weiter...