เพื่อล้างคำเตือนเรื่องหน่วยความจำ PHP จำกัดของ Nextcloud ให้ตั้งค่าmemory_limitอย่างน้อย512M512 MB ในไฟล์การกำหนดค่า PHP ที่เว็บเซิร์ฟเวอร์ใช้งาน จากนั้นรีสตาร์ทหรือโหลดบริการ PHP ที่เกี่ยวข้องใหม่ คู่มือการดูแลระบบเวอร์ชันเสถียรปัจจุบันของ Nextcloud แนะนำให้ตั้งค่า PHP อย่างน้อย 512 MB สาเหตุที่พบบ่อยที่สุดที่ทำให้คำเตือนยังคงอยู่หลังจากแก้ไขไฟล์คือเว็บเซิร์ฟเวอร์ใช้การกำหนดค่า PHP ที่แตกต่างจากการติดตั้ง PHP ผ่านบรรทัดคำสั่ง
เลือกวิธีการที่ตรงกับการใช้งานของคุณ: Apache พร้อม mod_php, Apache หรือ Nginx พร้อม PHP-FPM, คอนเทนเนอร์ หรือแพ็กเกจ Nextcloud ที่จัดการโดยผู้ให้บริการ อย่าแก้ไขค่า random ของโฮสต์php.iniและคิดว่าทุกการใช้งานใช้ค่าเดียวกัน ตรวจสอบผลลัพธ์จากหน้าภาพรวมผู้ดูแลระบบของ Nextcloud ซึ่งจะแสดงการกำหนดค่าเว็บแอปพลิเคชัน
คำเตือนนี้หมายความว่าอย่างไร?
ค่า PHP's นี้memory_limitคือหน่วยความจำสูงสุดที่สคริปต์ PHP เดียวสามารถจัดสรรได้ ไม่ใช่ RAM ทั้งหมดที่สงวนไว้สำหรับ Nextcloud และไม่ได้เพิ่มหน่วยความจำทางกายภาพที่มีให้เซิร์ฟเวอร์ คู่มือของ Nextcloud ระบุว่าควรตั้งค่าอย่างน้อย 512 MB สำหรับคำสั่งนี้ นอกจากนี้ ข้อกำหนดของระบบยังอธิบายว่าความต้องการหน่วยความจำของเซิร์ฟเวอร์จริงจะแตกต่างกันไปตามผู้ใช้ แอป ไฟล์ และกิจกรรมต่างๆ พวกเขาแนะนำให้ใช้ RAM อย่างน้อย 512 MB ต่อกระบวนการ PHP โดยมี 128 MB เป็นค่าต่ำสุด
การเพิ่มขีดจำกัด PHP อาจช่วยแก้ไขคำเตือนในการกำหนดค่าและช่วยให้คำขอที่ใช้หน่วยความจำมากมีพื้นที่มากขึ้น แต่ไม่สามารถเพิ่ม RAM ให้กับโฮสต์ที่มีหน่วยความจำไม่เพียงพอ แก้ไขปัญหาหน่วยความจำรั่วไหล หรือรับประกันว่าทุกแอปพลิเคชันจะทำงานได้สำเร็จ หากเซิร์ฟเวอร์มีข้อจำกัดด้านหน่วยความจำอยู่แล้ว การกำหนดขีดจำกัดต่อคำขอที่สูงขึ้นอาจเพิ่มความเสี่ยงที่ PHP ที่ทำงานพร้อมกันจะใช้ RAM ของระบบจนหมด
คุณควรแก้ไขการตั้งค่า PHP ส่วนใด
ขั้นแรก ให้ตรวจสอบว่า PHP รัน Nextcloud อย่างไร การตรวจสอบผ่านเทอร์มินัล เช่น จะphp --iniแสดงการกำหนดค่าบรรทัดคำสั่ง (CLI) การร้องขอเว็บของ Nextcloud อาจใช้โมดูล Apache แยกต่างหาก หรือบริการ PHP-FPM ที่มีการphp.iniแทนที่พูลหรือพูลอื่น Nextcloud ระบุไว้อย่างชัดเจนว่า PHP สำหรับเว็บและ CLI อาจใช้ไฟล์การกำหนดค่าที่แตกต่างกัน
โดยทั่วไปแล้ว ในระบบที่พัฒนามาจาก Debian /etc/php/8.x/apache2/php.iniไฟล์ PHP จะอยู่ในโฟลเดอร์ `/etc/php /etc/php/8.x/fpm/php.ini/php/php-FPM` เวอร์ชัน PHP และชื่อโฟลเดอร์อาจแตกต่างกันไป ระบบปฏิบัติการอื่นๆ มักใช้เส้นทางที่แตกต่างกัน เช่น โฟลเดอร์ที่ใช้ร่วมกัน/etc/php.iniโปรดใช้ข้อมูลเหล่านี้เป็นเพียงตัวอย่างเท่านั้น ควรใช้ตัวจัดการแพ็กเกจ การกำหนดค่าบริการ และรันไทม์ PHP เพื่อค้นหาไฟล์ที่ใช้งานอยู่จริง
หากต้องการตรวจสอบการตั้งค่า CLI ให้รันคำสั่ง:
php --ini
php -i | grep -i '^memory_limit'
คำสั่งเหล่านี้มีประโยชน์สำหรับงานที่กำหนดเวลาไว้ซึ่งเรียกใช้ PHP จากบรรทัดคำสั่ง แต่ไม่ได้พิสูจน์ว่ากระบวนการ Nextcloud ที่แสดงผลบนเบราว์เซอร์ใช้ค่าเดียวกัน หลีกเลี่ยงการสร้างphpinfo()หน้าเว็บสาธารณะบนเซิร์ฟเวอร์ เพราะอาจเปิดเผยเส้นทาง โมดูล และรายละเอียดการทำงานของโปรแกรมได้
จะตั้งค่าขีดจำกัดสำหรับ Apache หรือ PHP-FPM อย่างไร?
สำรองไฟล์การกำหนดค่าที่ใช้งานอยู่ก่อนทำการเปลี่ยนแปลง ในตำแหน่งที่ถูกต้อง ให้php.iniค้นหาmemory_limitบรรทัดที่มีอยู่และตั้งค่าเป็น512Mหรือค่าที่สูงกว่าที่เลือกไว้สำหรับปริมาณงานของคุณ:
memory_limit = 512M
ควรใช้การตั้งค่าที่ใช้งานอยู่เพียงครั้งเดียว แทนที่จะเพิ่มบรรทัดซ้ำซ้อนที่ส่วนท้ายของไฟล์หลายไฟล์ พูล PHP-FPM ยังสามารถกำหนดค่าสำหรับเวิร์กเกอร์ได้ ดังนั้นควรตรวจสอบการกำหนดค่าพูลหากค่าที่กำหนดphp.iniไม่มีผล บางการใช้งาน PHP รองรับการตั้งค่าต่อไดเร็กทอรี.user.iniการใช้งานหรือไม่นั้นขึ้นอยู่กับการกำหนดค่าเซิร์ฟเวอร์และควรตรวจสอบกับผู้ดูแลระบบ
Apache ใช้ mod_php
แก้ไขไฟล์php.iniที่ Apache ใช้ บันทึก แล้วรีสตาร์ท Apache เพื่อให้โมดูลโหลดการตั้งค่าใหม่ ชื่อบริการอาจแตกต่างกันไป ในระบบ Debian หรือ Ubuntu ชื่อบริการมักจะเป็นapache2; ในระบบตระกูล RHEL ชื่อบริการมักจะเป็นhttpdใช้ชื่อบริการให้ตรงกับระบบปฏิบัติการและขั้นตอนการบำรุงรักษาของคุณ
sudo systemctl restart apache2
แทนที่apache2หากการแจกจ่ายของคุณใช้ชื่อหน่วยที่แตกต่างกัน หาก Nextcloud ให้บริการผ่าน PHP-FPM แทน mod_php การรีสตาร์ท Apache เพียงอย่างเดียวจะไม่โหลดเวิร์กเกอร์ PHP ใหม่
Apache หรือ Nginx ที่ใช้ PHP-FPM
แก้ไขการตั้งค่า PHP-FPM ที่เว็บไซต์ใช้งานจริง หลังจากบันทึกการเปลี่ยนแปลงแล้ว ให้รีสตาร์ทหรือโหลดบริการ PHP-FPM ที่เกี่ยวข้องใหม่ หน่วยของการตั้งค่าอาจรวมถึงเวอร์ชัน PHP เช่นphp8.3-fpmหรืออาจใช้ชื่อเฉพาะของผู้จำหน่ายรายอื่น
sudo systemctl restart php8.3-fpm
ใช้ชื่อบริการที่ถูกต้องสำหรับเวอร์ชัน PHP ที่ติดตั้งไว้ Nginx จะส่งคำขอ PHP ไปยัง FPM ดังนั้นการเปลี่ยนแปลงการตั้งค่า PHP มักจะต้องใช้การเปลี่ยนแปลงกับ FPM ด้วย การรีสตาร์ท Nginx เพียงอย่างเดียวจะไม่โหลดขีดจำกัดหน่วยความจำของ PHP ใหม่ หากการกำหนดค่าพูล PHP-FPM ของคุณเขียนทับmemory_limitให้ปรับการตั้งค่าพูลหรือลบการเขียนทับออก จากนั้นรีสตาร์ทพูล
แล้วถ้า Nextcloud ทำงานบน Docker, AIO, Snap หรือแพ็กเกจอื่นๆ ล่ะ?
ใช้กลไกการกำหนดค่าสำหรับวิธีการติดตั้งนั้น การแก้ไขไฟล์ PHP ของโฮสต์โดยทั่วไปจะไม่เปลี่ยนแปลงรันไทม์ PHP ภายในคอนเทนเนอร์หรือแพ็กเกจแยกต่างหาก เอกสารอิมเมจ Docker อย่างเป็นทางการของ Nextcloud ได้ระบุPHP_MEMORY_LIMITตัวแปรสภาพแวดล้อมไว้ โดยมีค่าเริ่มต้นอยู่512Mในเอกสารอิมเมจปัจจุบัน ตั้งค่าตัวแปรนี้ในไฟล์ Compose หรือการกำหนดค่าคอนเทนเนอร์ จากนั้นสร้างใหม่หรือรีสตาร์ทคอนเทนเนอร์แอปพลิเคชันตามขั้นตอนการปรับใช้
environment:
PHP_MEMORY_LIMIT: 512M
อย่าคัดลอกการตั้งค่าดังกล่าวไปยังการติดตั้งทุกประเภท คู่มือ Nextcloud ระบุว่าสภาพแวดล้อมแบบสำเร็จรูป เช่น AIO, Snap, NCP และ Community Docker มี PHP ที่กำหนดค่าไว้ล่วงหน้า และแนะนำให้ผู้ดูแลระบบดูคำแนะนำเฉพาะแพ็กเกจสำหรับการปรับแต่ง สำหรับการตั้งค่าเหล่านั้น ให้ใช้ส่วนติดต่อผู้ใช้หรือเอกสารประกอบที่รองรับสำหรับแพ็กเกจนั้น การเมานต์วอลุ่มแบบถาวรและการกำหนดค่าที่สร้างขึ้นอาจแทนที่การแก้ไขด้วยตนเองเพียงครั้งเดียวได้
คุณจะยืนยันได้อย่างไรว่าปัญหาคำเตือนได้รับการแก้ไขแล้ว?
- ทำการเปลี่ยนแปลงกับไฟล์การตั้งค่า PHP ที่เชื่อมต่อกับเว็บ แล้วรีสตาร์ทหรือโหลดบริการเว็บ/PHP ที่เกี่ยวข้องใหม่
- ลงชื่อเข้าใช้ Nextcloud ในฐานะผู้ดูแลระบบ แล้วเปิดการตั้งค่า > การจัดการ > ภาพรวม
- รีเฟรชหน้าเว็บและตรวจสอบคำเตือนเกี่ยวกับการตั้งค่าอีกครั้ง ยืนยันว่าคำเตือนเกี่ยวกับข้อจำกัดด้านหน่วยความจำของ PHP หายไปแล้ว
- เรียกใช้งานการทำงานที่เคยทำให้เกิดคำเตือนมาก่อน เช่น งานของแอปที่ได้รับผลกระทบ และตรวจสอบบันทึกของ Nextcloud และ PHP เพื่อหาข้อความเกี่ยวกับการใช้หน่วยความจำมากเกินไป
หากคุณเรียกใช้งาน Nextcloud ในพื้นหลังผ่าน cron ของระบบด้วย ให้ตรวจสอบการตั้งค่า PHP ของ CLI แยกต่างหาก คำเตือนที่แสดงบนเว็บอาจถูกล้างออกได้ในขณะที่งาน CLI ยังคงใช้ขีดจำกัดที่ต่ำกว่า ยืนยันค่า CLI ด้วยคำสั่ง `npm run build` php --iniและphp -i`npm run build` สำหรับไบนารี PHP เดียวกันกับที่ใช้โดยคำสั่ง cron
คุณควรเพิ่มมูลค่าให้สูงกว่า 512 ล้านเหรียญสหรัฐเมื่อใด?
ควรเพิ่มขีดจำกัดก็ต่อเมื่อคำเตือนหายไปแล้ว แต่ปริมาณงานที่บันทึกไว้ยังคงถึงขีดจำกัดของ PHP หรือเมื่อคำแนะนำที่รองรับของแอปพลิเคชันระบุให้เพิ่มมากกว่านั้น ตรวจสอบหน่วยความจำเซิร์ฟเวอร์จริง จำนวนเวิร์กเกอร์ PHP-FPM หน่วยความจำฐานข้อมูล และบริการอื่นๆ ก่อน เนื่องจาก PHP ใช้ขีดจำกัดต่อสคริปต์ ดังนั้นเวิร์กเกอร์หลายตัวที่ทำงานหนักอาจใช้หน่วยความจำจำนวนมากพร้อมกันได้ กำหนดขีดจำกัดที่วัดได้ซึ่งเหมาะสมกับงบประมาณหน่วยความจำของโฮสต์ แทนที่จะใช้-1ซึ่ง PHP ระบุไว้ว่าไม่มีขีดจำกัดหน่วยความจำ
หากคำเตือนหายไปแล้ว แต่เซิร์ฟเวอร์ยังคงทำงานช้าลงหรือกระบวนการทำงานถูกปิด ให้ตรวจสอบการใช้งานหน่วยความจำและพื้นที่สวอปของระบบ บันทึก PHP-FPM และบันทึก Nextcloud พิจารณาว่าแอปพลิเคชันหรือคำขอใดใช้หน่วยความจำมากเกินไปหรือไม่ แคชหน่วยความจำ เช่น APCu หรือ Redis ช่วยแก้ปัญหาเรื่องแคชและประสิทธิภาพ แต่ไม่ใช่สิ่งที่จะมาทดแทนการตั้งค่า PHP ได้memory_limitควรเปลี่ยนทีละปัจจัยเพื่อตรวจสอบว่าผลลัพธ์ดีขึ้นหรือไม่
ตรวจสอบอาการเบื้องต้นอย่างรวดเร็ว
- ข้อความเตือนยังคงปรากฏหลังจากแก้ไขไฟล์ php.ini:ตรวจสอบว่าคุณแก้ไขไฟล์ CLI แทนไฟล์ของ Apache/FPM หรือว่าการตั้งค่าพูลมีผลเหนือกว่าการตั้งค่านี้
- ข้อความเตือนหายไปแล้ว แต่การทำงานของ cron ยังคงล้มเหลว:โปรดตรวจสอบไบนารี PHP ของ CLI และการกำหนดค่าแยกต่างหาก
- เว็บเซิร์ฟเวอร์แสดงข้อผิดพลาดหลังจากรีสตาร์ท:โปรดตรวจสอบสถานะและบันทึกของเว็บเซิร์ฟเวอร์หรือบริการ PHP-FPM และกู้คืนข้อมูลสำรองหากการเปลี่ยนแปลงการกำหนดค่าทำให้การเริ่มต้นล้มเหลว
- คำเตือนหายไปแล้ว แต่โฮสต์มี RAM ไม่เพียงพอ:ลดจำนวนการทำงานพร้อมกัน เพิ่มหน่วยความจำ หรือระบุโปรเซสที่ใช้หน่วยความจำก่อนที่จะเพิ่มขีดจำกัด PHP ต่อไปอีก
- หากคุณใช้คอนเทนเนอร์หรือแพ็กเกจสำเร็จรูปให้เปลี่ยนการตั้งค่า PHP ที่รองรับในแพ็กเกจนั้น แทนที่จะเปลี่ยนในไฟล์ php.ini ของโฮสต์
เอกสารอ้างอิงอย่างเป็นทางการ