apache2ctl: 87: ulimit: ข้อ จำกัด การตั้งค่าข้อผิดพลาด (ไม่อนุญาตให้ใช้)


12

เซิร์ฟเวอร์ทำงานได้ดีหรืออย่างน้อยก็ดูเหมือนว่ามีข้อผิดพลาดดังต่อไปนี้:

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

มันเกิดขึ้นกับ Apache 2.2.22-9 บน Debian Wheezy

# apache2ctl configtest

/ usr / sbin / apache2ctl: 87: ulimit: ข้อ จำกัด การตั้งค่าข้อผิดพลาด (ไม่อนุญาตการดำเนินการ)
ไวยากรณ์ตกลง

# service apache2 reload

[ .... ] โหลดเว็บเซิร์ฟเวอร์การตั้งค่า: apache2 / usr / sbin / apache2ctl: 87: ulimit: ข้อผิดพลาดการตั้งค่าการ จำกัด
(ปฏิบัติการไม่ได้รับอนุญาต) ตกลง

# service apache2 restart

[.... ] การรีสตาร์ทเว็บเซิร์ฟเวอร์: apache2 / usr / sbin / apache2ctl: 87: ulimit: ข้อ จำกัด การตั้งค่าข้อผิดพลาด (ไม่อนุญาตการดำเนินการ)
... รอ / usr / sbin / apache2ctl: 87: ulimit: ข้อ จำกัด การตั้งค่าข้อผิดพลาด (การดำเนินการ
ไม่ได้รับอนุญาต) ตกลง

# service apache2 status

Apache2 กำลังทำงานอยู่ (pid 32045)


1
ดูสิ่งที่คุณมีใน /etc/security/limits.conf และ /etc/security/limits.d ดูเหมือนว่าคุณมี APACHE_ULIMIT_MAX_FILES (ดูใน / usr / sbin / apache2ctl) ตั้งค่าตัวแปรเป็นสิ่งที่ใหญ่กว่าขีด จำกัด ในไฟล์นั้น
HUB

คำตอบ:


16

สิ่งนี้อาจช่วยได้: - http://ubuntuforums.org/showthread.php?p=11950245#post11950245

sudo service apache2 restart # no errors
service apache2 restart      # errors

ขอบคุณฉันเห็นแล้ว แต่ก็ไม่ช่วย การใช้ sudo หรือไม่เปลี่ยนแปลงอะไรฉันมีข้อผิดพลาดเดียวกัน
Pascal Polleunus

1
ทำงานให้ฉัน! ลืมไปsudoเลย
ThomasReggi

2
+1 ความมหัศจรรย์sudoทำให้กลอุบาย
จักรยาน

แม้เลวร้ายที่สุดฉันมีการตั้งค่านักเทียบท่าที่นี่กำลัง appering ทำงานบนคอมพิวเตอร์ที่บ้านของฉัน แต่ไม่ได้อยู่บนเซิร์ฟเวอร์ .. ในภาชนะที่ไม่มีความแตกต่างระหว่างพวกเขา ... ทำให้รู้สึกถึงฉัน
superhero

เหมือนกันที่นี่ในดวงใจ นอกจากนี้การรีสตาร์ทจะไม่ทำงานหากมีหรือไม่มี sudo สำหรับฉัน ฉันต้องใช้หยุดแล้วเริ่มโดยไม่ต้อง sudo เพื่อให้มันทำงาน
Shardj

5

ปัญหาเกิดจาก / usr / sbin / apache2ctl (บน Debian) ลองดูสิ:

~$ 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

นี่คือการตั้งค่าจำนวนไฟล์ที่เปิดที่อนุญาตให้ 8192 หรือพยายามและล้มเหลวในกรณีของคุณ

ดังนั้นเพื่อหลีกเลี่ยงข้อผิดพลาดเมื่อ apache2ctl ทำเช่นนั้นให้ปรับการตั้งค่าระบบของคุณในไฟล์ /etc/security/limits.conf โดยเพิ่มสองบรรทัดต่อไปนี้:

*               soft    nofile          8192
*               hard    nofile          8192

ฉันไม่ได้เพิ่มมันเกินความจำเป็น (8192) เพราะฉันไม่รู้ว่ามันจะส่งผลกระทบอะไร อย่างไรก็ตามสิ่งนี้ได้รับการกำจัดของคำเตือน

ไม่แน่ใจว่าคุณจะต้องรีบูตระบบของคุณหลังจากนั้นหรือไม่เพราะมีองค์ประกอบแบบไดนามิกสำหรับแผลที่ฉันไม่คุ้นเคย อย่างไรก็ตามคุณสามารถทดสอบได้ง่ายพอที่จะหาว่าจำนวนไฟล์ ulimit ปัจจุบันของคุณคืออะไร:

ulimit -n

คุณอาจต้องการอ่านที่ฉันพบ: stackoverflow - การตั้งค่า ulimit


ฉันจะทำย้อนกลับและลดขีด จำกัด ของ Apache ได้อย่างไร
eri0o

การเห็นว่าสคริปต์ที่ฉันโพสต์ในคำตอบนั้นตรงจากสคริปต์ apache2ctl ซึ่งติดตั้งโดย apache แล้วคุณจะต้องไปที่ไฟล์สคริปต์นั้นและทำการเปลี่ยนแปลงสมมติว่าคุณมีสิทธิ์การเข้าถึงและสมมติว่าคุณยินดีที่จะทำซ้ำ การดำเนินการกับทุก Apache อัพเกรด
Adam

2

1. ตรวจสอบและแก้ไขค่าulimitในเครื่องโฮสต์ของคุณ เพิ่มค่าในไฟล์/ etc / profileจากนั้นให้มีผล

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

หรือคุณสามารถ:

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

2. เริ่มบริการนักเทียบท่าและกำหนดค่าให้มีประสิทธิภาพ

sudo service docker restart

3. ทดสอบ ulimit ในภาชนะบรรจุ

ulimit -n

นี่คือผลการทดสอบของฉัน!

เคล็ดลับ: บางทีคุณอาจจะยังสามารถลองคำสั่งดังต่อไปนี้ (จำเป็น: ulimit ในเครื่องโฮสต์ควรจะมีขนาดใหญ่กว่า 8192) แต่ฉันกำลังล้มเหลว

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

$ ulimit -n 8192ให้ฉัน-bash: ulimit: open files: cannot modify limit: Operation not permitted
Shardj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.