apache2ctl: 87: ulimit: batas pengaturan kesalahan (Operasi tidak diizinkan)

12

Server berjalan dengan baik - atau setidaknya tampaknya - tetapi selalu ada kesalahan berikut:

apache2/usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)

Ini terjadi dengan Apache 2.2.22-9 di Debian Wheezy.

# apache2ctl configtest

/ usr / sbin / apache2ctl: 87: ulimit: batas pengaturan kesalahan (Operasi tidak diizinkan)
Sintaks OK

# service apache2 reload

[....] Memuat ulang konfigurasi server web: apache2 / usr / sbin / apache2ctl: 87: ulimit: batas pengaturan kesalahan (Pengoperasian tidak diizinkan)
. baik

# service apache2 restart

[....] Mulai ulang server web: apache2 / usr / sbin / apache2ctl: 87: ulimit: batas pengaturan kesalahan (Operasi tidak diizinkan)
... menunggu / usr / sbin / apache2ctl: 87: ulimit: batas pengaturan kesalahan (Operasi tidak diizinkan)
. baik

# service apache2 status

Apache2 sedang berjalan (pid 32045).

Pascal Polleunus
sumber
1
Lihatlah apa yang Anda miliki di /etc/security/limits.conf dan /etc/security/limits.d. Tampaknya Anda memiliki APACHE_ULIMIT_MAX_FILES (lihat di / usr / sbin / apache2ctl) variabel diatur ke sesuatu yang lebih besar daripada batas dalam file itu.
HUB

Jawaban:

16

Ini mungkin membantu: - http://ubuntuforums.org/showthread.php?p=11950245#post11950245

sudo service apache2 restart # no errors
service apache2 restart      # errors
Mukesh Chapagain
sumber
Terima kasih, saya sudah melihatnya tetapi tidak membantu. Menggunakan sudo atau tidak tidak mengubah apa pun, saya memiliki kesalahan yang sama.
Pascal Polleunus
1
Bekerja untukku! Benar-benar lupa sudo.
ThomasReggi
2
+1 magic sudoselalu berhasil
sepeda
bahkan yang terburuk, saya memiliki pengaturan buruh pelabuhan di mana ini sedang melakukan, bekerja pada komputer di rumah saya, tetapi tidak pada server .. dalam wadah tanpa perbedaan di antara mereka ... tidak masuk akal bagi saya
superhero
5

Masalahnya berasal dari / usr / sbin / apache2ctl (di Debian). Coba lihat:

~$ grep ULIMIT /usr/sbin/apache2ctl
ULIMIT_MAX_FILES="${APACHE_ULIMIT_MAX_FILES:-ulimit -n 8192}"
if [ "x$ULIMIT_MAX_FILES" != "x" ] ; then
    $ULIMIT_MAX_FILES

Ini dia mengatur jumlah file terbuka yang diizinkan untuk 8192. Atau mencoba dan gagal, dalam kasus Anda.

Jadi untuk menghindari kesalahan saat apache2ctl melakukan itu, sesuaikan pengaturan sistem Anda di file /etc/security/limits.conf dengan menambahkan dua baris ini:

*               soft    nofile          8192
*               hard    nofile          8192

Saya tidak menambahnya lebih dari yang seharusnya (8192) karena saya tidak tahu apa lagi yang akan berdampak. Namun ini menghilangkan peringatan itu.

Tidak yakin apakah Anda perlu me-reboot sistem Anda setelah itu, karena ada elemen dinamis ke ulimits yang saya tidak kenal. Namun Anda dapat menguji dengan cukup mudah untuk mengetahui berapa jumlah file Anda saat ini:

ulimit -n

Anda mungkin ingin membaca di mana saya menemukannya: stackoverflow - pengaturan ulimit

Adam
sumber
Bagaimana saya melakukan yang sebaliknya dan mengurangi batas Apache?
eri0o
Melihat skrip yang saya posting di jawabannya langsung keluar dari skrip apache2ctl yang diinstal oleh apache, maka Anda harus pergi ke file skrip itu dan mengubahnya, dengan asumsi Anda memiliki hak akses dan dengan asumsi Anda bersedia mengulangi aksinya dengan setiap peningkatan Apache.
Adam
2

1. Periksa dan modifikasi nilai ulimit di mesin host Anda. Tambahkan nilai-nilai dalam file / etc / profile lalu buat itu berlaku.

ulimit -u 10240
ulimit -n 8192     #This configuration is what we most needed
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited

source /etc/profile

atau kamu bisa:

sudo sh -c 'printf "\nulimit -HSn 999999\n" >> /etc/sysconfig/docker'

2. Mulai kembali layanan buruh pelabuhan dan buat konfigurasi menjadi efektif.

sudo service docker restart

3. Menguji ulimit dalam wadah.

ulimit -n

Ini adalah hasil tes saya!

Tips: Mungkin Anda juga dapat mencoba perintah seperti di bawah ini (prasyarat: ulimit di mesin host harus lebih besar dari 8192), tetapi saya gagal .

docker run --privileged -it -p xxxx:80 --ulimit data=8192 linode/lamp /bin/bash
pengguna3772170
sumber