Toso eukolos <<ios>>?
Vasilis Vasaitis
vvas at hal.csd.auth.gr
Sat Feb 5 17:31:30 EET 2000
On Thu, Feb 03, 2000 at 04:55:48AM +0200, Giorgos Keramidas wrote:
> On Wed, Feb 02, 2000 at 08:51:01PM +0200, Antonis Tsolomitis wrote:
> >
> > Mou edeikse evas foitntns tov eksns aplo kwdika
> > (pou sigoura 0a kserete osoi kataxete apo programmatismo)
> >
> > #include <stdio.h>
> >
> > main()
> > {
> > int n;
> > for(;;)
> > {
> > n=fork();
> > }
> > }
> >
> >
> > Ama ekteleseis tov kwdika ayto to systnma prepei va kavei
> > reboot gia va syvel0ei. Eivai toso eukolo ws xrnstns
> > va govatiseis eva opoiodnpote mnxavnma? H' kati dev
> > eivai swsto stous pyrnves pou divouv kapoies diavomes?
>
> hades% echo $SHELL
> /bin/csh
> hades% limit
> cputime unlimited
> filesize unlimited
> datasize 524288 kbytes
> stacksize 65536 kbytes
> coredumpsize unlimited
> memoryuse unlimited
> memorylocked unlimited
> maxproc 531 # die evil "virus", die
> openfiles 1064
> sbsize unlimited
Έπαιξα λίγο αυτές τις μέρες με το συγκεκριμένο προγραμματάκι, αφού είχε
αρκετό ενδιαφέρον. Όντως με το που το έτρεχα και μέχρι να πατήσω Ctrl-C,
έχανα κάθε επαφή με το σύστημά μου, και επόμενο ήταν να μου δημιουργηθεί η
απορία γιατί ακριβώς συνέβαινε αυτό. Έτσι τώρα ξέρω ότι το παραπάνω `maxproc
531' δεν έχει και πολύ νόημα, αφού το συγκεκριμένο πρόγραμμα δεν υπάρχει
ποτέ περίπτωση να γεμίσει το process table, τουλάχιστον στο Linux. Κι αυτό
γιατί ο μέγιστος αριθμός από εργασίες που μπορεί να τρέχει συγχρόνως ένας
χρήστης σε οποιαδήποτε περίπτωση είναι 256, εκτός αν κανείς πειράξει το
<linux/tasks.h> και φτιάξει καινούριο πυρήνα. Ούτε και ο περιορισμός των
δεδομένων και της στοίβας έχει και πολύ νόημα στη συγκεκριμένη περίπτωση -
256 εργασίες με copy-on-write σελίδες δεν πιάνουν πια και τόση πολλή μνήμη.
Ο λόγος που ο κώδικας αυτός ακινητοποιεί το μηχάνημα, είναι επειδή ο
πυρήνας είναι συνέχεια απασχολημένος στην εκτέλεση των fork() και δεν του
μένει χρόνος για να εκτελέσει και τίποτα άλλο. Με 256 τέτοια να τρέχουν
συγχρόνως το load του μηχανήματος ξεπερνάει εύκολα το 150. Στην πράξη, η
καλύτερη λύση είναι ο περιορισμός των processes με ένα `ulimit -Hu 100',
όπως πρότεινε και ο Χρήστος, αν και εγώ βλέπω το 64 ως μία καλύτερη τιμή.
Ακόμα καλύτερα βέβαια είναι να μπει η σχετική ρύθμιση στο /etc/limits, του
στυλ `baduser U64', ή αν το σύστημα έχει PAM, όπως το RedHat και άλλα
(προσοχή χρήστες του potato), μια ρύθμιση στο /etc/security/limits.conf, του
στυλ `baduser hard nproc 64'.
--
\ /_. _o|o _ \ /_. _ _.o_|_o _
\/(_|_>|||_> \/(_|_>(_|| |_|_>
__
_. _ / \|_ _.| _ _ _| _. _|_|_ _ ._
\/\/(_|_>| (|/| |(_||o(__>(_|o(_||_||_| |o(_||
\__ _|
--
====================================================================
Gia boithia (h na diagrafhte) e-mail sto majordomo at hellug.gr
Ta archives tis listas einai sto http://lists.hellug.gr/lgu.html
prin steilete kapoia erothsh psakte mipos exei hdh apanththei.
Gia opoiodipote problima stilte e-mail ston owner-linux-greek-users at hellug.gr
====================================================================
More information about the Linux-greek-users
mailing list