Κατά την εκτέλεση της εφαρμογής μου λαμβάνω μερικές φορές ένα σφάλμα σχετικά με "πάρα πολλά ανοιχτά αρχεία".
Η εκτέλεση του ulimit -a
αναφέρει ότι το όριο είναι 1024. Πώς μπορώ να αυξήσω το όριο πάνω από 1024;
Επεξεργασία
Η επιλογή ulimit -n 2048
οδηγεί σε σφάλμα δικαιωμάτων.
Θα μπορούσατε πάντα να δοκιμάσετε να κάνετε ένα ulimit -n 2048
. Αυτό θα μηδενίσει το όριο μόνο για το τρέχον κέλυφος και ο αριθμός που καθορίζετε δεν πρέπει να υπερβαίνει το σκληρό όριο
Κάθε λειτουργικό σύστημα έχει διαφορετικό σκληρό όριο που ρυθμίζεται σε ένα αρχείο ρυθμίσεων. Για παράδειγμα, το σκληρό όριο ανοιχτών αρχείων στο Solaris μπορεί να οριστεί κατά την εκκίνηση από το /etc/system.
set rlim_fd_max = 166384
set rlim_fd_cur = 8192
Στο OS X, τα ίδια δεδομένα πρέπει να οριστούν στο αρχείο /etc/sysctl.conf.
kern.maxfilesperproc=166384
kern.maxfiles=8192
Στο Linux, αυτές οι ρυθμίσεις βρίσκονται συχνά στο αρχείο /etc/security/limits.conf.
Υπάρχουν δύο είδη ορίων:
Τα μαλακά όρια μπορούν να οριστούν από οποιονδήποτε χρήστη, ενώ τα σκληρά όρια μπορούν να αλλάξουν μόνο από τον root. Τα όρια είναι μια ιδιότητα μιας διεργασίας. Κληροδοτούνται όταν δημιουργείται μια διεργασία-παιδί, οπότε τα όρια για όλο το σύστημα θα πρέπει να τίθενται κατά την αρχικοποίηση του συστήματος στα σενάρια init και τα όρια των χρηστών θα πρέπει να τίθενται κατά την είσοδο των χρηστών, για παράδειγμα με τη χρήση του pam_limits.
Συχνά υπάρχουν προεπιλογές που ορίζονται κατά την εκκίνηση του μηχανήματος. Έτσι, παρόλο που μπορείτε να επαναφέρετε το ulimit σε ένα μεμονωμένο κέλυφος, μπορεί να διαπιστώσετε ότι επανέρχεται στην προηγούμενη τιμή κατά την επανεκκίνηση. Ίσως να θέλετε να αναζητήσετε με grep τα σενάρια εκκίνησης για τις εντολές ύπαρξης ulimit, αν θέλετε να αλλάξετε την προεπιλεγμένη τιμή.
Αν χρησιμοποιείτε Linux και έχετε το σφάλμα δικαιωμάτων, θα πρέπει να αυξήσετε το επιτρεπόμενο όριο στο αρχείο /etc/limits.conf
ή /etc/security/limits.conf
(το πού βρίσκεται το αρχείο εξαρτάται από τη συγκεκριμένη διανομή Linux).
Για παράδειγμα, για να επιτρέψετε σε οποιονδήποτε στο μηχάνημα να αυξήσει τον αριθμό των ανοιχτών αρχείων του μέχρι το 10000 προσθέστε τη γραμμή στο αρχείο limits.conf
.
* hard nofile 10000
Στη συνέχεια, αποσυνδεθείτε και ξανασυνδεθείτε στο σύστημά σας και θα πρέπει να μπορείτε να κάνετε:
ulimit -n 10000
χωρίς σφάλμα δικαιωμάτων.
/etc/security/limits.conf
webuser hard nofile 64000
Στη συνέχεια, συνδεθείτε ως webuser
su - webuser
προσαρτήστε τα αρχεία .bashrc και .bash_profile εκτελώντας την εντολή
echo "ulimit -n 64000" >> .bashrc ; echo "ulimit -n 64000" >> .bash_profile
$ ulimit -a | grep open
open files (-n) 64000
Αυτό είναι όλο και αυτοί μπουμ, μπουμ, μπουμ, μπουμ.