สถานการณ์แปลกเพราะฉันมี 2 เซิร์ฟเวอร์ที่เหมือนกันพร้อมแอปพลิเคชันเดียวกัน แต่
บนเซิร์ฟเวอร์เดียว ฉันได้รับข้อผิดพลาด ulimit จากแอปพลิเคชันที่กำหนดเอง ข้อผิดพลาด ulimit: ไฟล์ที่เปิดมากเกินไป แต่ในทางกลับกันก็ใช้งานได้ตามที่คาดไว้
ฉันมั่นใจว่าการกำหนดค่าเหมือนกันจริงๆ แต่ฉันไม่สามารถเข้าใจได้ว่าเหตุใดจึงเป็นเช่นนั้น
ข้อเท็จจริง
/etc/systemd/system.conf
DefaultLimitNOFILE=100000000:100000000
/etc/systemd/user.conf
DefaultLimitNOFILE=10000000
/etc/security/limits.conf
ซอฟต์เซิร์ฟเวอร์ nproc 10000000
arserver ยาก nproc 10000000
arserver soft nofile 10000000
arserver ยาก nofile 10000000
รูทซอฟท์ nproc 10000000
รูทยาก nproc 10000000
ซอฟต์โนไฟล์ 10000000
รูทฮาร์ดโนไฟล์ 10000000
แมว /etc/sysctl.conf
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.ipv4.tcp_max_orphans = 4096
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_reordering=3
net.ipv4.tcp_fastopen = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 32768 65535
vm.nr_hugepages = 1250
fs.file-max = 10,000,000
ติดตามแมว | grep pam_limit
arserver@arserver03:/carmicli/carmi$ cat testlog1 | ขีด จำกัด grep
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/security/pam_limits.so", O_RDONLY|O_CLOEXEC) = 7
openat(AT_FDCWD, "/proc/1/จำกัด", O_RDONLY) = 7
openat(AT_FDCWD, "/etc/security/limits.conf", O_RDONLY) = 7
อ่าน (7, "# /etc/security/limits.conf\n#\n#E"..., 4096) = 2345
openat(AT_FDCWD, "/etc/security/limits.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 7
openat(AT_FDCWD, "/proc/1/จำกัด", O_RDONLY) = 7
openat(AT_FDCWD, "/etc/security/limits.conf", O_RDONLY) = 7
อ่าน (7, "# /etc/security/limits.conf\n#\n#E"..., 4096) = 2345
openat(AT_FDCWD, "/etc/security/limits.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 7
ยูลิมิต -a
ulimit ได้รับการอัปเดตใน ulimit หลังจากรีบูต แต่แอปพลิเคชันจะยังไม่เริ่มทำงาน
arserver@arserver03:/carmicli/carmi$ ulimit -a
เวลาที่ไม่ปิดกั้นตามเวลาจริง (ไมโครวินาที, -R) ไม่จำกัด
ขนาดไฟล์หลัก (บล็อก, -c) 0
ขนาด data seg (kbytes, -d) ไม่จำกัด
การจัดลำดับความสำคัญ (-e) 0
ขนาดไฟล์ (บล็อก, -f) ไม่จำกัด
สัญญาณที่รอดำเนินการ (-i) 1030919
หน่วยความจำสูงสุดที่ล็อก (kbytes, -l) 32998380
ขนาดหน่วยความจำสูงสุด (kbytes, -m) ไม่จำกัด
เปิดไฟล์ (-n) 1048576
ขนาดไปป์ (512 ไบต์, -p) 8
คิวข้อความ POSIX (ไบต์, -q) 819200
ลำดับความสำคัญตามเวลาจริง (-r) 0
ขนาดสแต็ก (kbytes, -s) 8192
เวลาซีพียู (วินาที, -t) ไม่จำกัด
กระบวนการของผู้ใช้สูงสุด (-u) 10,000,000
หน่วยความจำเสมือน (kbytes, -v) ไม่จำกัด
ล็อคไฟล์ (-x) ไม่จำกัด
ในบริการ systemd ที่สร้างขึ้นเพื่อดูว่าฉันสามารถแทนที่ขีด จำกัด สากลเช่นนี้ได้หรือไม่
[หน่วย]
คำอธิบาย=Carmi Miner
หลังจาก = network.target
[บริการ]
ผู้ใช้ = ราก
ไดเรกทอรีการทำงาน=/app/carmi/
ExecStart=/app/carmi/app.elf
รีสตาร์ท = เปิดผิดปกติ
LimitNOFILE=1000000000
LimitNOFILESoft=1000000000
[ติดตั้ง]
WantedBy=multi-user.target
แต่ก็ยังล้มเหลว
08 เม.ย. 14:19:45 น. arserver app.elf[3553]: ข้อผิดพลาด ulimit: อาจเปิดไฟล์มากเกินไป
08 เม.ย. 14:19:45 น. arserver systemd[1]: app.service: ออกจากกระบวนการหลักแล้ว, รหัส=ออกแล้ว, สถานะ=19/n/a
08 เม.ย. 14:19:45 น. arserver systemd[1]: app.service: ล้มเหลวด้วยผลลัพธ์ 'exit-code'
08 เม.ย. 14:19:45 arserver systemd[1]: app.service: ใช้เวลา CPU 21.420 วินาที
ฉันยังเพิ่ม pam_limits.so ไปยัง pam.d configs เนื่องจากฉันอ่านพบว่าในรุ่นที่ไม่ใช่ LSB อาจขาดหายไปจากบางส่วน เพิ่มที่จำเป็นใน common_session sudo และ sshd
arserver@arserver03:/app/app$ grep -r "pam_limit" /etc/pam.d/
/etc/pam.d/cron:ต้องการเซสชัน pam_limits.so
/etc/pam.d/login:ต้องการเซสชัน pam_limits.so
/etc/pam.d/sshd:ต้องการเซสชัน pam_limits.so
/etc/pam.d/sudo:ต้องการเซสชัน pam_limits.so
/etc/pam.d/su:ต้องการเซสชัน pam_limits.so
/etc/pam.d/common-session:ต้องการเซสชัน pam_limits.so
/etc/pam.d/common-session-noninteractive: ต้องการเซสชัน pam_limits.so
/etc/pam.d/runuser:ต้องการเซสชัน pam_limits.so
arserver@arserver03:/carmicli/carmi$ grep -r "pam_limit" /etc/pam.d/
/etc/pam.d/cron:ต้องการเซสชัน pam_limits.so
/etc/pam.d/login:ต้องการเซสชัน pam_limits.so
/etc/pam.d/sshd:ต้องการเซสชัน pam_limits.so
/etc/pam.d/sudo:ต้องการเซสชัน pam_limits.so
/etc/pam.d/su:ต้องการเซสชัน pam_limits.so
/etc/pam.d/common-session:ต้องการเซสชัน pam_limits.so
/etc/pam.d/common-session-noninteractive: ต้องการเซสชัน pam_limits.so
/etc/pam.d/runuser:ต้องการเซสชัน pam_limits.so
ฉันดึงผมออกจากปัญหานี้ในช่วงสัปดาห์ที่ผ่านมา ถ้าใครสามารถช่วยได้จะได้รับการชื่นชมมาก
การไปที่ ubuntu 20.04 เป็นทางเลือกหนึ่ง แต่ฉันจะใช้เวลานานในการย้ายข้อมูล ดังนั้นฉันจึงอยากหาวิธีแก้ไขถ้าเป็นไปได้
อัปเดต
เมื่อฉันทำ ซูโด ซู เพื่อรูทฉันพบปัญหาเดียวกัน แต่มีข้อผิดพลาดนี้ในบันทึกการรับรองความถูกต้อง
8 เมษายน 14:45:31 น. arserver05 su: pam_limits(su:session): ไม่สามารถตั้งค่าขีดจำกัดสำหรับ 'nofile' เป็น soft=10000000, hard=10000000: ไม่อนุญาตให้ดำเนินการ; uid=0,euid=0
8 เมษายน 14:45:31 น. arserver05 su: pam_limits(su:session): ไม่สามารถตั้งค่าขีดจำกัดสำหรับ 'nofile' เป็น soft=10000000, hard=10000000: ไม่อนุญาตให้ดำเนินการ; uid=0,euid=0
อัพเดท 2
ไม่สามารถตั้งค่าขีดจำกัดด้านบนได้ 1048576
root@arserver03:/home/arserver# ulimit -n 1048576
root@arserver03:/home/arserver# ulimit -n 10485767
ทุบตี: ulimit: เปิดไฟล์: ไม่สามารถแก้ไขขีด จำกัด: ไม่อนุญาตให้ดำเนินการ
root@arserver03:/home/arserver# ulimit -n 1048576