Αν έχετε χρήστες, ίσως έχετε σκεφτεί να περιορίσετε την δυνατότητα χρήσης του συστήματος από αυτούς. Το FreeBSD παρέχει στο διαχειριστή αρκετούς τρόπους για να περιορίσει τους πόρους του συστήματος που μπορεί να χρησιμοποιήσει ένα άτομο. Αυτά τα όρια χωρίζονται σε δύο τμήματα: μερίδια δίσκου (disk quotas), και άλλα όρια πόρων.
Τα μερίδια δίσκου περιορίζουν την χρήση των δίσκων στους χρήστες, και παρέχουν έναν τρόπο γρήγορου ελέγχου αυτής της χρήσης χωρίς να υπολογίζονται από την αρχή κάθε φορά. Τα μερίδια συζητούνται στο Τμήμα 19.15, «File System Quotas».
Τα άλλα όρια πόρων περιλαμβάνουν τρόπους για περιορισμό χρήσης της CPU, της μνήμης, και άλλων πόρων που μπορεί να καταναλώσει ένα χρήστης. Τα όρια αυτά καθορίζονται χρησιμοποιώντας κλάσεις σύνδεσης και συζητούνται εδώ.
Οι κλάσεις σύνδεσης καθορίζονται στο
/etc/login.conf
. Οι ακριβείς έννοιες είναι πέρα
από τον σκοπό αυτού του τμήματος, αλλά περιγράφονται με λεπτομέρεια
στην σελίδα login.conf(5) του manual. Είναι αρκετό να πούμε
ότι κάθε χρήστης ανήκει σε μία κλάση σύνδεσης (την
default
εξ' ορισμού), και ότι κάθε κλάση σύνδεσης
έχει ένα σύνολο από δυνατότητες σύνδεσης που σχετίζονται με αυτήν. Μια
δυνατότητα σύνδεσης καθορίζεται από ένα ζεύγος
name=value
, όπου
name
είναι ένα γνωστό αναγνωριστικό και
value
είναι μια επιλεγμένη τιμή που
θα χρησιμοποιηθεί σύμφωνα με το όνομα. To στήσιμο κλάσεων
σύνδεσης και δυνατοτήτων είναι μια μάλλον απλή διαδικασία και
περιγράφεται επίσης στο login.conf(5).
Το σύστημα συνήθως δεν διαβάζει απευθείας το αρχείο ρυθμίσεων στο
/etc/login.conf
, αλλά το αρχείο
βάσης δεδομένων /etc/login.conf.db
το οποίο
παρέχει γρηγορότερες αναζητήσεις. Για να δημιουργήσουμε το
/etc/login.conf.db
από το
/etc/login.conf
, εκτελούμε την παρακάτω
εντολή:
#
cap_mkdb /etc/login.conf
Τα όρια πόρων είναι διαφορετικά από τις απλές δυνατότητες σύνδεσης για δύο λόγους. Πρώτα, για κάθε όριο, υπάρχει ένα μεταβλητό (τρέχον) και ένα μόνιμο όριο. Ένα μεταβλητό όριο μπορεί να αλλάξει από τον χρήστη ή την εφαρμογή, αλλά δεν μπορεί να είναι υψηλότερο από το μόνιμο όριο. Το τελευταίο μπορεί να ελαττωθεί από τον χρήστη, αλλά ποτέ να αυξηθεί. Δεύτερον, τα περισσότερα όρια πόρων εφαρμόζονται ανά διεργασία σε ένα συγκεκριμένο χρήστη, όχι στον χρήστη συνολικά. Σημειώστε, όμως, ότι αυτές οι διαφορές είναι υποχρεωτικές από τον συγκεκριμένο χειρισμό των ορίων, όχι από την υλοποίηση του πλαισίου των δυνατοτήτων σύνδεσης (δηλαδή, δεν είναι όντως μια ειδική περίπτωση των δυνατοτήτων σύνδεσης).
Και έτσι, χωρίς πρόσθετη φασαρία, παρακάτω είναι τα πιο συχνά χρησιμοποιούμενα όρια πόρων (τα υπόλοιπα, μαζί με όλες τις άλλες δυνατότητες σύνδεσης, μπορείτε να τα βρείτε στο login.conf(5)).
coredumpsize
Το όριο στο μέγεθος ενός αρχείου core που δημιουργείται από
ένα πρόγραμμα, είναι για προφανείς λόγους, εξαρτώμενο από άλλα
όρια της χρήσης του δίσκου (π.χ.,
filesize
, ή μερίδια δίσκου).
Παρ' όλα αυτά, χρησιμοποιείται συχνά σαν μία λιγότερο αυστηρή
μέθοδο ελέγχου της κατανάλωσης χώρου του δίσκου: αφού οι χρήστες
δεν δημιουργούν αρχεία core από μόνοι τους, και συχνά δεν τα
διαγράφουν, ορίζοντας το coredumpsize μπορεί να τους γλυτώσει
από πρόωρο τέλος αποθηκευτικού χώρου, αν για παράδειγμα
καταρρεύσει ένα μεγάλο πρόγραμμα (όπως
π.χ. το emacs).
cputime
Αυτό είναι το μέγιστο ποσό χρόνου της CPU που μπορεί να καταναλώσει ένας χρήστης ή μια διεργασία. Διεργασίες που υπερβαίνουν αυτό το όριο θα τερματιστούν από τον πυρήνα.
Αυτό είναι ένα όριο στον χρόνο της CPU που καταναλώνεται, όχι στο ποσοστό της CPU όπως εμφανίζεται σε κάποια πεδία από τις top(1) και ps(1). Όριο στο ποσοστό, μέχρι τη στιγμή που γράφονται αυτές οι γραμμές, δεν είναι δυνατό, και μάλλον θα είναι άχρηστο: ένας μεταγλωττιστής—πιθανότατα μια έγκυρη εργασία— μπορεί εύκολα να χρησιμοποιήσει σχεδόν το 100% μιας CPU για κάποιο χρόνο.
filesize
Αυτό είναι το μέγιστο μέγεθος ενός αρχείου που μπορεί να κατέχει ένας χρήστης. Σε αντίθεση με τα μερίδια δίσκου, αυτό το όριο επιβάλλεται σε κάθε αρχείο χωριστά, όχι στο σύνολο όλων των αρχείων που κατέχει ένας χρήστης.
maxproc
Αυτό είναι ο μέγιστος αριθμός διεργασιών που μπορεί να εκτελεί
ένας χρήστης. Περιλαμβάνει με τον ίδιο τρόπο διεργασίες τόσο
παρασκηνίου όσο και προσκηνίου. Για προφανείς λόγους, δεν μπορεί
να είναι μεγαλύτερος από το όριο του συστήματος που ορίζεται από
το kern.maxproc
sysctl(8). Επίσης
σημειώστε ότι θέτοντας πολύ μικρή τιμή, μπορεί να παρεμποδίσετε
την παραγωγικότητα ενός χρήστη: είναι συχνά χρήσιμο να
συνδέεται κάποιος πολλαπλές φορές ή να εκτελεί διοχετεύσεις
(pipelines). Κάποιες εργασίες, όπως η μεταγλώττιση ενός μεγάλου
προγράμματος, δημιουργούν επίσης πολλές διεργασίες
(π.χ. make(1), cc(1), και άλλοι ενδιάμεσοι
προεπεξεργαστές).
memorylocked
Αυτό είναι το μέγιστο ποσό μνήμης που μπορεί να ζητήσει μια διεργασία να κλειδωθεί στην κύρια μνήμη (π.χ., βλέπε mlock(2)). Κάποια κρίσιμα προγράμματα του συστήματος, όπως το amd(8), κλειδώνουν στην κύρια μνήμη έτσι ώστε στην περίπτωση που αντιμετατεθούν, δεν συνεισφέρουν στην επιβάρυνση του συστήματος σε περίπτωση προβλήματος.
memoryuse
Αυτό είναι το μέγιστο μέγεθος μνήμης που μπορεί μια διεργασία να καταναλώσει σε κάθε χρονική στιγμή. Περιλαμβάνει συνολικά την κύρια μνήμη και την χρήση της αντιμετάθεσης (swap). Δεν πρόκειται για κάποιο συνολικό όριο για τον περιορισμό της κατανάλωσης της μνήμης, αλλά είναι μια καλή αρχή.
openfiles
Αυτός είναι ο μέγιστος αριθμός αρχείων που μπορεί να έχει
ανοικτά μια διεργασία. Στο FreeBSD, τα αρχεία επίσης
χρησιμοποιούνται για να απεικονίσουν υποδοχές (sockets) και
κανάλια IPC. Προσέξτε λοιπόν να μην θέσετε αυτό το όριο πολύ
χαμηλά. Το συνολικό όριο του συστήματος καθορίζεται από
το kern.maxfiles
sysctl(8).
sbsize
Αυτό είναι το όριο της μνήμης δικτύου, και άρα των mbufs, που μπορεί να καταναλώσει ένας χρήστης. Ξεκίνησε ως απάντηση σε μια παλιά DoS επίθεση η οποία δημιουργούσε πολλά sockets, αλλά μπορεί να χρησιμοποιηθεί γενικά για τον περιορισμό των επικοινωνιών δικτύου.
stacksize
Αυτό είναι το μέγιστο όριο που μπορεί να μεγαλώσει η στοίβα μιας διεργασίας. Από μόνο του δεν είναι αρκετό για να περιοριστεί το μέγεθος μνήμης που μπορεί να χρησιμοποιήσει ένα πρόγραμμα. Συνεπώς, πρέπει να χρησιμοποιείται σε συνδυασμό με άλλα όρια.
Υπάρχουν μερικά ακόμα πράγματα που πρέπει να θυμάστε όταν θέτετε όρια σε πόρους. Παρακάτω είναι μερικές γενικές συμβουλές, προτάσεις, και διάφορα σχόλια.
Οι διεργασίες που ξεκινούν στην εκκίνηση του συστήματος από το
/etc/rc
εκχωρούνται στην
κλάση σύνδεσης daemon
.
Αν και το /etc/login.conf
που έρχεται
με το σύστημα είναι μια καλή πηγή λογικών τιμών για τα περισσότερα
όρια, μόνο εσείς, ο διαχειριστής, μπορεί να ξέρετε τι είναι
κατάλληλο για το σύστημα σας. Θέτοντας ένα όριο πολύ ψηλά μπορεί
να διευκολύνετε την κατάχρηση του συστήματος σας, ενώ θέτοντας το
πολύ χαμηλά μπορεί να περιορίσετε την παραγωγικότητα.
Στους χρήστες του X Window System (X11) θα πρέπει μάλλον να παραχωρηθούν περισσότεροι πόροι από ότι σε άλλους χρήστες. Το X11 από μόνο του καταναλώνει πολλούς πόρους, αλλά επίσης ενθαρρύνει τους χρήστες να τρέχουν περισσότερα προγράμματα ταυτόχρονα.
Θυμηθείτε ότι πολλά όρια εφαρμόζονται σε κάθε διεργασία χωριστά,
όχι στον χρήστη συνολικά. Για παράδειγμα, θέτοντας
openfiles
σε 50 σημαίνει ότι κάθε διεργασία
που εκτελεί ο χρήστης μπορεί να ανοίξει έως 50 αρχεία. Έτσι, ο
συνολικός αριθμός αρχείων που μπορεί να ανοίξει ο χρήστης είναι η
τιμή του openfiles
πολλαπλασιαζόμενη με την
τιμή του maxproc
. Αυτό επίσης ισχύει για την
κατανάλωση μνήμης.
Για περισσότερες πληροφορίες στα όρια πόρων και τις κλάσεις σύνδεσης και των δυνατοτήτων γενικά, παρακαλούμε συμβουλευτείτε τις σχετικές σελίδες του εγχειριδίου: cap_mkdb(1), getrlimit(2), login.conf(5).
Αυτό το κείμενο, και άλλα κείμενα, μπορεί να βρεθεί στο ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/
Για ερωτήσεις σχετικά με το FreeBSD, διαβάστε την
τεκμηρίωση πριν να επικοινωνήσετε με την
<questions@FreeBSD.org>.
Για ερωτήσεις σχετικά με αυτή την τεκμηρίωση, στείλτε e-mail στην
<doc@FreeBSD.org>.