เซิร์ฟเวอร์ไฟล์อาจทำงานช้าแม้ว่ากราฟการใช้งาน CPU จะดูเงียบๆ ก็ตาม เช่น การแสดงรายการไดเร็กทอรีใช้เวลานานหลายวินาที การอัปโหลดหยุดชะงักระหว่างการใช้งานหนัก หรือกระบวนการทำงานดูเหมือนจะใช้ RAM มากขึ้นทุกวัน การเปรียบเทียบ ownCloud Infinite Scale (oCIS) กับ Nextcloud 28 โดยใช้ตัวเลข "RAM ต่อผู้ใช้" เพียงอย่างเดียวจะไม่สามารถวินิจฉัยปัญหาได้ ไม่มีเกณฑ์มาตรฐานอย่างเป็นทางการที่สามารถระบุผู้ชนะได้ และทั้งสองโครงการระบุว่าความต้องการหน่วยความจำขึ้นอยู่กับปริมาณงานและการกำหนดค่า สำหรับการเปรียบเทียบที่มีประโยชน์ ควรวัดแต่ละแพลตฟอร์มด้วยไฟล์ ไคลเอ็นต์ พื้นที่จัดเก็บ การทำงานพร้อมกัน และช่วงเวลาทดสอบเดียวกัน ตรวจสอบก่อนว่าคอขวดอยู่ที่แอปพลิเคชัน ฐานข้อมูล พื้นที่จัดเก็บ หรือการทำงานเบื้องหลัง
นอกจากนี้ยังมีข้อจำกัดด้านการบำรุงรักษา: Nextcloud 28 สิ้นสุดการสนับสนุนในเดือนธันวาคม 2024 ตามกำหนดการที่โครงการประกาศไว้ จึงไม่ได้รับการแก้ไขข้อบกพร่องเป็นประจำในช่องทางการเผยแพร่ของชุมชนอีกต่อไป หาก Nextcloud 28 กำลังใช้งานอยู่ ควรวางแผนอัปเกรดก่อนที่จะพิจารณาการปรับแต่งประสิทธิภาพเป็นวิธีแก้ปัญหาทั้งหมด ขั้นตอนด้านล่างนี้ช่วยเปรียบเทียบพฤติกรรมและระบุปัญหาที่เกิดจากทรัพยากรไม่เพียงพอ แต่ไม่ได้ทำให้เวอร์ชันที่ไม่ได้รับการสนับสนุนนั้นปลอดภัยที่จะนำมาใช้งาน
เหตุใดค่า RAM และความเร็วที่แสดงจึงแตกต่างกัน?
Infinite Scale และ Nextcloud ใช้สถาปัตยกรรมเซิร์ฟเวอร์ที่แตกต่างกัน oCIS ถูกจัดระเบียบเป็นบริการในแพลตฟอร์มที่ใช้ภาษา Go โดยตัวควบคุมภายในจะเริ่มต้นบริการเป็นกระบวนการเซิร์ฟเวอร์เดียว ความต้องการหน่วยความจำอาจรวมถึงข้อมูลเมตาของผู้ใช้และพื้นที่จัดเก็บที่แคชไว้ และเอกสารของ ownCloud ได้เชื่อมโยงจำนวนพื้นที่และข้อมูลเมตาที่เก็บไว้ในหน่วยความจำกับ RAM ที่ใช้งานได้และประสิทธิภาพการเข้าถึงหรือการซิงโครไนซ์โดยเฉพาะ การที่เซิร์ฟเวอร์แสดงชุดการทำงานที่ใหญ่ขึ้นหลังจากการสแกนเริ่มต้นขนาดใหญ่ ไม่ได้เป็นหลักฐานของการรั่วไหลเสมอไป ตรวจสอบว่าหน่วยความจำเสถียรหลังจากทำการจัดทำดัชนีแล้วหรือไม่ และความหน่วงยังคงอยู่ในระดับที่ยอมรับได้หรือไม่
Nextcloud 28 เป็นแอปพลิเคชัน PHP ขนาดการใช้งานโดยรวมขึ้นอยู่กับจำนวนเวิร์กเกอร์ PHP-FPM และพฤติกรรมของเวิร์กเกอร์แต่ละตัว แอปพลิเคชันที่เปิดใช้งาน เว็บเซิร์ฟเวอร์ ฐานข้อมูล แคช การสร้างภาพตัวอย่าง และงานเบื้องหลัง คู่มือการดูแลระบบอย่างเป็นทางการระบุว่าความต้องการหน่วยความจำจะแตกต่างกันอย่างมากตามผู้ใช้ แอปพลิเคชัน ไฟล์ และกิจกรรมของเซิร์ฟเวอร์ การเพิ่มเวิร์กเกอร์สามารถปรับปรุงการจัดการคำขอแบบขนานได้ แต่ก็อาจทำให้การใช้งาน RAM สูงสุดเพิ่มขึ้นด้วย ดังนั้น ควรเปรียบเทียบหน่วยความจำทั้งหมดของโฮสต์หรือคอนเทนเนอร์ ไม่ใช่แค่เปรียบเทียบกระบวนการ PHP หนึ่งกระบวนการกับกระบวนการ oCIS หนึ่งกระบวนการ
การจัดเก็บข้อมูลอาจเป็นปัจจัยสำคัญในทั้งสองแพลตฟอร์ม ดิสก์ที่ช้า ระบบไฟล์เครือข่าย ที่เก็บข้อมูลแบบอ็อบเจ็กต์ ฐานข้อมูล หรือการสแกนไวรัส อาจทำให้คำขอต่างๆ ดูเหมือนถูกจำกัดด้วยแอปพลิเคชัน ในทำนองเดียวกัน แคชที่เย็นและแคชที่อุ่นจะไม่ให้เวลาตอบสนองที่เทียบเท่ากัน คำถามที่สำคัญไม่ใช่ว่าผลิตภัณฑ์ใดมีจำนวนการใช้งานที่ไม่ได้ใช้งานน้อยกว่า แต่เป็นว่าชุดซอฟต์แวร์ใดที่สามารถทำงานจริงให้เสร็จภายในงบประมาณของ RAM และเวลาแฝงได้
เปรียบเทียบภายใต้เงื่อนไขเดียวกัน
- บันทึกรายละเอียดการสร้างและการติดตั้งอย่างละเอียดจดบันทึกเวอร์ชัน oCIS, ระดับแพทช์ Nextcloud 28, ระบบปฏิบัติการ, ข้อจำกัดของคอนเทนเนอร์, การจัดสรร CPU, ฐานข้อมูล, ระบบจัดเก็บข้อมูลเบื้องหลัง, แอปและบริการที่เปิดใช้งาน, เวอร์ชัน PHP และเว็บเซิร์ฟเวอร์ ควรใช้ฮาร์ดแวร์และเส้นทางข้อมูลเดียวกันเท่าที่จะเป็นไปได้ อย่าใช้ข้อจำกัดหน่วยความจำของคอนเทนเนอร์สำหรับแพลตฟอร์มหนึ่งร่วมกับการใช้งานทั้งโฮสต์สำหรับอีกแพลตฟอร์มหนึ่ง
- ใช้ชุดข้อมูลทดสอบที่เป็นตัวแทนรวมถึงการทำงานที่มักทำให้ระบบทำงานช้าในสภาพแวดล้อมการใช้งานจริง เช่น การซิงค์เริ่มต้น การซิงค์แบบเพิ่มทีละน้อย การเรียกดูไดเร็กทอรีขนาดใหญ่ การดาวน์โหลดและอัปโหลดไฟล์ การแชร์ และการเข้าสู่ระบบพร้อมกัน รักษาจำนวนไฟล์ การกระจายขนาดไฟล์ จำนวนไคลเอ็นต์ที่ใช้งานอยู่ และการทำงานพร้อมกันให้คงที่ ใช้สำเนาข้อมูลสำหรับการทดสอบ และหลีกเลี่ยงการทดสอบข้อมูลจริงมากเกินไป
- วัดค่าพื้นฐานก่อน แล้วจึงทำซ้ำบันทึกหน่วยความจำที่ไม่ได้ใช้งานหลังจากเริ่มต้นระบบ หน่วยความจำระหว่างการทำงานแต่ละครั้ง หน่วยความจำสูงสุด ซีพียู การอ่าน/เขียนดิสก์ กิจกรรมฐานข้อมูล และความหน่วงในการร้องขอหรือการซิงค์ รันหนึ่งครั้งหลังจากเริ่มต้นระบบใหม่หมด และอีกครั้งหลังจากแคชได้รับการวอร์มแล้ว ทำซ้ำแต่ละครั้งจนกว่าผลลัพธ์จะเสถียร อย่าเรียกการรันเพียงครั้งเดียวว่าเป็นเกณฑ์มาตรฐาน
- แยกหน่วยความจำของแอปพลิเคชันออกจากหน่วยความจำของโฮสต์สำหรับคอนเทนเนอร์ ให้ตรวจสอบชุดการทำงานของหน่วยความจำและขีดจำกัดของคอนเทนเนอร์ สำหรับกระบวนการของ Linux ให้ใช้ตัวตรวจสอบกระบวนการและสถิติหน่วยความจำของระบบ นอกจากนี้ ให้สังเกตหน่วยความจำสวอป เหตุการณ์หน่วยความจำไม่เพียงพอ และหน่วยความจำของฐานข้อมูล แคชของโฮสต์ที่เพิ่มขึ้นไม่ได้หมายความว่าแอปพลิเคชันมีการรั่วไหลของหน่วยความจำเสมอไป และขีดจำกัดของคอนเทนเนอร์อาจรายงานหน่วยความจำแตกต่างกันไปในแต่ละรันไทม์
สำหรับการตรวจสอบ oCIS โปรดศึกษาเอกสารที่ตรงกับเวอร์ชันเพื่อดูเมตริกของบริการและเอนด์พอยต์ของ Prometheus เอกสาร ownCloud 8.2 อธิบายเมตริกสำหรับบริการที่รองรับ โดยเมตริกจะแตกต่างกันไปตามบริการและเวอร์ชัน ภาพรวมการดูแลระบบและเครื่องมือระบบของ Nextcloud สามารถแสดงคำเตือนในการตั้งค่าได้ ในขณะที่การตรวจสอบระบบปฏิบัติการและฐานข้อมูลจำเป็นสำหรับการอธิบายปริมาณ RAM ทั้งหมด พยายามรักษาอุปกรณ์ทดสอบให้เหมือนกันมากที่สุดเท่าที่จะเป็นไปได้ และบันทึกหน่วยและช่วงเวลาการสุ่มตัวอย่าง
ควรปรับแต่งอะไรก่อนเป็นอันดับแรก?
1. ยืนยันว่ามีแรงกดดันด้านหน่วยความจำจริง
สังเกตการใช้งาน RAM สูงอย่างต่อเนื่องควบคู่กับการสลับหน่วยความจำ การหยุดทำงานเนื่องจากหน่วยความจำไม่เพียงพอ การรีสตาร์ทคอนเทนเนอร์ หรือความหน่วงในการร้องขอที่เพิ่มขึ้น การใช้งาน RAM สูงเพียงอย่างเดียวอาจบ่งบอกถึงการแคชที่มีประโยชน์ หากการใช้งานเพิ่มขึ้นระหว่างการสแกนแล้วคงที่ การเพิ่มหน่วยความจำอาจไม่จำเป็น หากการใช้งานเพิ่มขึ้นโดยไม่คงที่ภายใต้ภาระงานที่คงที่ ให้ตรวจสอบบันทึก หน่วยความจำระดับบริการ และงานที่กำลังทำงานอยู่ก่อนที่จะเปลี่ยนขีดจำกัด
2. ลดงานเบื้องหลังที่ไม่จำเป็น
ระบุการสร้างตัวอย่าง การสแกนไวรัส การจัดทำดัชนี การซิงโครไนซ์ข้อมูล และการบำรุงรักษาตามกำหนดเวลา งานเหล่านี้อาจแย่งทรัพยากรกับคำขอแบบโต้ตอบ ย้ายงานที่ใช้ทรัพยากรมากไปยังช่วงเวลาที่เงียบสงบกว่า หรือลดจำนวนการทำงานพร้อมกันโดยใช้การควบคุมที่ระบุไว้ในเอกสารสำหรับเวอร์ชันที่ติดตั้ง อย่าปิดใช้งานการสแกนความปลอดภัยหรือการบำรุงรักษาที่จำเป็นเพียงเพื่อให้กราฟดูเล็กลง ให้ประเมินต้นทุนของงานและผลกระทบต่อผู้ใช้ก่อน
3. ปรับแต่งการตั้งค่า PHP และแคชของ Nextcloud อย่างรอบคอบ
สำหรับ Nextcloud ให้ตรวจสอบการกำหนดค่า PHP ที่รองรับสำหรับเวอร์ชัน 28 และกำหนดขนาดของ PHP-FPM worker ให้เหมาะสมกับ RAM ที่มีอยู่ จำนวน worker น้อยเกินไปอาจทำให้คิวคำขอเต็ม ในขณะที่จำนวน worker มากเกินไปอาจทำให้หน่วยความจำหมด กำหนดค่าแคชหน่วยความจำที่รองรับและ Redis สำหรับการล็อกไฟล์แบบธุรกรรมตามความเหมาะสม โดยปฏิบัติตามคู่มือเวอร์ชัน 28 แคชใช้หน่วยความจำ แต่สามารถปรับปรุงการทำงานซ้ำๆ ได้ ดังนั้นควรเปรียบเทียบความหน่วงและหน่วยความจำไปพร้อมกัน หลีกเลี่ยงการคัดลอกการตั้งค่าจาก Nextcloud เวอร์ชันปัจจุบันไปยังเวอร์ชัน 28 โดยไม่ตรวจสอบเอกสารเฉพาะเวอร์ชันก่อน
4. ตรวจสอบเมตาเดตาและตัวเลือกการจัดเก็บข้อมูลของ oCIS
สำหรับการใช้งาน Infinite Scale ให้ประเมินจำนวนพื้นที่จัดเก็บข้อมูล เมตาเดต้าของไฟล์และไดเร็กทอรี ไดรเวอร์จัดเก็บข้อมูล และพฤติกรรมของแคช เอกสารข้อกำหนดเบื้องต้นอย่างเป็นทางการอธิบายว่าเมตาเดต้าที่เก็บไว้ในหน่วยความจำส่งผลต่อประสิทธิภาพการเข้าถึงและการซิงโครไนซ์ หากปริมาณงานแสดงรายการหรือการซิงโครไนซ์ขนาดใหญ่เกิดขึ้นพร้อมกับปัญหาการใช้หน่วยความจำ ให้เปรียบเทียบเมตริกของบริการและพื้นที่จัดเก็บข้อมูลที่เกี่ยวข้องก่อนที่จะเพิ่ม RAM ตรวจสอบตัวเลือกเฉพาะของพื้นที่จัดเก็บข้อมูลกับเวอร์ชัน oCIS ที่แน่นอน อย่าสันนิษฐานว่าแบ็กเอนด์การจัดเก็บข้อมูลหนึ่งมีพฤติกรรมการใช้หน่วยความจำเหมือนกับอีกแบ็กเอนด์หนึ่ง
5. เพิ่มกำลังการผลิตก็ต่อเมื่อระบุข้อจำกัดได้แล้วเท่านั้น
หากปริมาณงานที่วัดได้มีความหน่วงที่เสถียรและยอมรับได้ แต่ถึงขีดจำกัดของหน่วยความจำ ให้เพิ่ม RAM หรือปรับการจัดสรรทรัพยากร แล้วทำการทดสอบซ้ำ หากความหน่วงไม่ดีในขณะที่หน่วยความจำยังเพียงพอ ให้ตรวจสอบการสืบค้นฐานข้อมูล ความหน่วงในการจัดเก็บข้อมูล ปริมาณงานของเครือข่าย การล็อก และความอิ่มตัวของ CPU แทน การปรับขนาดบริการ oCIS หรือการเพิ่มเวิร์กเกอร์สามารถปรับปรุงปริมาณงานในการใช้งานที่ออกแบบอย่างเหมาะสมได้ แต่ก็เปลี่ยนแปลงความต้องการทรัพยากรและความซับซ้อนในการดำเนินงานด้วย เปลี่ยนตัวแปรทีละตัวเพื่อให้สามารถระบุผลลัพธ์ได้
วิธีการตรวจสอบผลลัพธ์
ทำซ้ำขั้นตอนการทำงานเดิมหลังจากทำการเปลี่ยนแปลงแต่ละครั้ง และเปรียบเทียบตัวชี้วัดเดียวกัน ได้แก่ ปริมาณ RAM สูงสุดและขณะคงที่ กิจกรรมสวอป การร้องขอ p95 หรือความหน่วงในการซิงค์ (ถ้ามี) การถ่ายโอนที่เสร็จสมบูรณ์ และจำนวนข้อผิดพลาดหรือการเริ่มต้นใหม่ การแก้ไขที่ประสบความสำเร็จควรปรับปรุงการทำงานที่ผู้ใช้รายงานโดยไม่สร้างภาระด้านหน่วยความจำในส่วนอื่น สำหรับการเปรียบเทียบแพลตฟอร์มอย่างเป็นธรรม ให้เผยแพร่เงื่อนไขการทดสอบควบคู่ไปกับผลลัพธ์ และระบุว่าแคชอยู่ในสถานะเย็นหรืออุ่น อย่าสรุปจากเซิร์ฟเวอร์หรือชุดข้อมูลขนาดเล็กเพียงชุดเดียว
สุดท้ายนี้ ให้พิจารณาสถานะการสิ้นสุดการสนับสนุนของ Nextcloud 28 เป็นประเด็นการดำเนินงานที่แยกต่างหาก ใช้คำแนะนำในการอัปเกรดของโครงการเพื่อย้ายไปยังเวอร์ชันที่ได้รับการสนับสนุน จากนั้นทำการเปรียบเทียบอีกครั้ง เนื่องจากโค้ดเวอร์ชันใหม่กว่า เวอร์ชัน PHP แอป และการเปลี่ยนแปลงการย้ายข้อมูลอาจเปลี่ยนแปลงขนาดไฟล์ได้ สำหรับข้อกำหนดการใช้งานในปัจจุบันและการตั้งค่าเฉพาะเวอร์ชัน โปรดดูข้อกำหนดเบื้องต้นของ ownCloud Infinite Scale 8.2 , เมตริก ownCloud สำหรับ Prometheus , ข้อกำหนดของระบบ Nextcloud 28 , การแคชหน่วยความจำของ Nextcloud 28และตารางการบำรุงรักษาและการเผยแพร่ของ Nextcloud