หากต้องการเพิ่มหน่วยความจำให้กับคอนเทนเนอร์ Collabora Online CODE ให้เพิ่มขีดจำกัดของ Docker ในการกำหนดค่าที่สร้างคอนเทนเนอร์นั้น จากนั้นสร้างคอนเทนเนอร์ใหม่และตรวจสอบขีดจำกัดที่ใช้งานได้จริงด้วยคำ สั่ง `docker run` หรือ docker inspect` docker statsdocker run` การเพิ่มการตั้งค่าแอปพลิเคชันจะไม่เพิ่มขีดจำกัดสูงสุดของคอนเทนเนอร์ Docker และโฮสต์หรือเครื่องเสมือน Docker Desktop ต้องมีหน่วยความจำเพียงพอที่จะรองรับขีดจำกัดที่สูงขึ้น
ตัวอย่างสมมติที่ใช้ตลอดทั้งบทความ:ไรลีย์ดูแลการใช้งาน Docker Compose บนโฮสต์เดียว สมมติว่าdocker statsแสดงขีดจำกัด 2 GiB และมีการใช้งานใกล้ถึงขีดจำกัดนั้นในขณะที่เปิดเอกสารหลายฉบับ ไรลีย์กำลังพิจารณาที่จะเพิ่มขีดจำกัดเป็น 4 GiB ตัวเลขเหล่านี้เป็นเพียงตัวอย่างเท่านั้น ไม่ใช่คำแนะนำเกี่ยวกับการกำหนดขนาดของ Collabora การอ้างอิงประสิทธิภาพ หรือผลการทดสอบ ขีดจำกัดของคุณควรมาจากปริมาณการใช้งานและความจุของโฮสต์ที่สังเกตได้
1. ตรวจสอบให้แน่ใจว่าภาชนะนั้นชนกับฝาปิดจริง ๆ
รันคำสั่งเหล่านี้บนโฮสต์ Docker โดยแทนที่collaboraด้วยชื่อคอนเทนเนอร์จริง:
docker stats --no-stream collabora
docker inspect --format 'Memory={{.HostConfig.Memory}} OOMKilled={{.State.OOMKilled}}' collabora
docker statsแสดงการใช้งานปัจจุบันและขีดจำกัดของคอนเทนเนอร์ เอาต์พุตการตรวจสอบจะรายงานขีดจำกัดหน่วยความจำที่กำหนดค่าไว้เป็นไบต์ และแสดงว่า Docker บันทึกคอนเทนเนอร์นั้นว่าถูกฆ่าเนื่องจาก0หน่วยความจำไม่เพียงพอหรือไม่ ค่าการตรวจสอบที่เป็นศูนย์หมายความว่า Docker ไม่มีขีดจำกัดที่ชัดเจนสำหรับคอนเทนเนอร์นั้น ไม่ได้หมายความว่าเครื่องมี RAM ไม่จำกัด การอ่านค่าสูงเพียงอย่างเดียวไม่ใช่หลักฐานยืนยันเหตุการณ์หน่วยความจำไม่เพียงพอ ดังนั้นควรเปรียบเทียบกับประวัติการเริ่มต้นใหม่ บันทึก และเวลาที่ผู้ใช้พบความล้มเหลว
ตัวอย่างการวินิจฉัยสมมติฐาน: คอนเทนเนอร์ CODE กำลังจะเต็มความจุตามที่กำหนดไว้ที่ 2 GiB แล้วก่อนที่จะเพิ่มขีดจำกัด โปรดตรวจสอบว่ามี RAM เหลืออยู่เท่าใดสำหรับระบบปฏิบัติการและบริการอื่นๆคำแนะนำด้านทรัพยากรของ Dockerแนะนำให้ทดสอบความต้องการของแอปพลิเคชันและเรียกใช้คอนเทนเนอร์บนโฮสต์ที่มีทรัพยากรเพียงพอ สำหรับ Docker Desktop โปรดตรวจสอบการตั้งค่า > ทรัพยากรด้วย: หน่วยความจำที่จัดสรรให้กับ Docker VM เป็นขีดจำกัดที่แยกต่างหากซึ่งใช้ร่วมกันโดยคอนเทนเนอร์ การเพิ่มขีดจำกัดของ CODE เกินกว่าการจัดสรรนั้นจะไม่สามารถสร้างหน่วยความจำทางกายภาพเพิ่มเติมได้ โปรดดูการตั้งค่าทรัพยากรของ Docker Desktop
2. เปลี่ยนขีดจำกัดบริการ Compose
แก้ไขบริการ CODE ที่มีอยู่แล้วในไฟล์ Compose ของคุณ คงค่าแท็กรูปภาพ พอร์ต สภาพแวดล้อม วอลุ่ม เครือข่าย และนโยบายการรีสตาร์ทปัจจุบันไว้ เพิ่มหรืออัปเดตเฉพาะการตั้งค่าหน่วยความจำเท่านั้น สำหรับตัวอย่างสมมติ 4 GiB ของ Riley:
services:
collabora:
image: collabora/code:your-current-tag
mem_limit: 4g
# Keep the service’s existing settings below
ตัวอย่างการเขียนโค้ด: กำหนดขีดจำกัดหน่วยความจำระดับบริการโดยคงแท็กอิมเมจ CODE ที่ใช้งานอยู่ตัวอย่างนี้ใช้Docker image อย่างเป็นทางการของ Collabora ที่ชื่อ CODE ; โปรดใช้แท็กที่ใช้แล้วในการปรับใช้ของคุณmem_limitเป็นขีดจำกัดสูงสุด ไม่ใช่การสำรอง: Docker อนุญาตให้คอนเทนเนอร์ใช้ได้ไม่เกินจำนวนนั้น แต่การตั้งค่านี้ไม่ได้สำรอง RAM จำนวนนั้นบนโฮสต์เอกสารอ้างอิงบริการ Docker Composeกำหนดmem_limitและระบุว่าต้องตรงกันdeploy.resources.limits.memoryหากมีทั้งสองอย่าง หากการปรับใช้ของคุณใช้ orchestrator หรือไฟล์ Compose ที่จัดการโดยแพลตฟอร์ม ให้ใช้ฟิลด์ทรัพยากรที่รองรับของแพลตฟอร์มนั้นและรักษาค่าขีดจำกัดที่ซ้ำกันให้สอดคล้องกัน
หากคุณเริ่มใช้งาน CODE โดยตรงด้วยdocker runคำสั่ง `docker run` ให้สร้างใหม่จากคำสั่งเดิมด้วยคำ สั่ง --memory=4g`docker run` และคงตัวเลือกทั้งหมดที่มีอยู่ไว้ สำหรับการเปลี่ยนแปลงรันไทม์อย่างรวดเร็วในคอนเทนเนอร์ Linux ที่มีอยู่ Docker ยังรองรับคำ สั่ง `docker docker update --memory 4g <container_name>run` ด้วย ให้ถือว่าไฟล์ Compose หรือคำสั่งรันเดิมเป็นแหล่งข้อมูลที่ถูกต้อง เพื่อไม่ให้การแทนที่ในภายหลังคืนค่าความสามารถเดิม ดูข้อมูลอ้างอิงการอัปเดตคอนเทนเนอร์ Docker
3. สร้างโค้ดใหม่เพื่อให้ค่าจำกัดที่บันทึกไว้มีผล
จากไดเร็กทอรีที่มีไฟล์ Compose ที่ใช้งานอยู่ ให้ตรวจสอบความถูกต้องของการกำหนดค่าที่ผสานแล้ว จากนั้นสร้างบริการ CODE ขึ้นมาใหม่เพียงอย่างเดียว:
docker compose config
docker compose up -d --no-deps --force-recreate collabora
ใช้คีย์บริการจากไฟล์ของคุณแทนที่collaboraตรวจสอบการกำหนดค่าที่แสดงผลสำหรับขีดจำกัดใหม่ก่อนที่จะนำไปใช้ การสร้าง CODE ใหม่จะขัดจังหวะเซสชันการแก้ไขที่ขึ้นอยู่กับคอนเทนเนอร์นั้นชั่วครู่ ดังนั้นให้กำหนดเวลาการเปลี่ยนแปลงเมื่อการขัดจังหวะบริการสั้นๆ เป็นที่ยอมรับได้ อย่าลบวอลุ่มหรือเรียกใช้docker compose down -v; การดำเนินการเหล่านั้นไม่จำเป็นสำหรับการเปลี่ยนแปลงขีดจำกัดหน่วยความจำและอาจลบข้อมูลถาวรที่เป็นของบริการอื่นๆ ได้
ใช้การตั้งค่า Compose ที่แก้ไขแล้ว และสร้างบริการ CODE ขึ้นใหม่เท่านั้น4. ตรวจสอบฝาครอบใหม่และตรวจสอบพฤติกรรมภายใต้โหลด
หลังจากบริการกลับมาทำงานแล้ว ให้ตรวจสอบคอนเทนเนอร์จริง ไม่ใช่แค่ไฟล์ YAML เท่านั้น:
docker inspect --format 'Memory={{.HostConfig.Memory}} OOMKilled={{.State.OOMKilled}}' collabora
docker stats --no-stream collabora
สำหรับค่าตัวอย่าง4gผลลัพธ์การตรวจสอบควรแสดงขนาดประมาณ 4 GiB ในหน่วยไบต์ และdocker statsควรแสดงขีดจำกัดใกล้เคียง 4 GiB ภาพด้านล่างใช้ผลลัพธ์ตัวอย่างเพื่อเป็นตัวอย่างเท่านั้น จากนั้นสังเกตโค้ดขณะเปิดประเภทเอกสารและจำนวนเซสชันพร้อมกันโดยประมาณที่สำคัญต่อการใช้งานของคุณ ตรวจสอบให้แน่ใจว่าคอนเทนเนอร์ยังคงทำงานอยู่ ข้อผิดพลาดที่ผู้ใช้มองเห็นหยุดลง และโฮสต์ยังคงมีหน่วยความจำสำหรับกระบวนการอื่นๆ
รูปแบบการตรวจสอบที่คาดหวังสำหรับการตั้งค่าสมมติขนาด 4 GiB ค่าที่แสดงเหล่านี้เป็นตัวอย่างผลลัพธ์ ไม่ใช่ค่าที่วัดได้จากการใช้งานจริงหากปัญหายังคงอยู่
หากมีการตั้งค่าขีดจำกัดใหม่แล้ว แต่ CODE ยังคงรีสตาร์ท ให้ตรวจสอบdocker inspectสถานะdocker logsและเหตุการณ์เคอร์เนลหรือ Docker ของโฮสต์เพื่อหาบันทึกเกี่ยวกับหน่วยความจำไม่เพียงพอ หากคอนเทนเนอร์ยังคงทำงานได้ดี แต่การประมวลผลเอกสารยังคงกระตุ้นการล้างข้อมูล Docker อาจไม่ใช่คอขวดที่แท้จริง การกำหนดค่าของ Collabora เอง มีพฤติกรรมการจัดการหน่วยความจำที่แยกต่างหากจากขีดจำกัด cgroup ของ Docker เทมเพลตการกำหนดค่าcoolwsdของโครงการจะบันทึกการควบคุมฝั่งเซิร์ฟเวอร์ ตรวจสอบการกำหนดค่าสำหรับ CODE เวอร์ชันที่ติดตั้งของคุณก่อนที่จะเปลี่ยนแปลง
อย่าแก้ปัญหาความไม่แน่นอนด้วยการตั้งค่าคอนเทนเนอร์ให้มีหน่วยความจำไม่จำกัด หรือปิดใช้งานตัวจัดการหน่วยความจำไม่เพียงพอ (out-of-memory killer) Docker เตือนว่าคอนเทนเนอร์ที่ไม่มีขีดจำกัดอาจทำให้หน่วยความจำของโฮสต์หมดลงและส่งผลกระทบต่อบริการที่ไม่เกี่ยวข้อง หากโฮสต์ไม่มีพื้นที่เหลือเฟือ วิธีแก้ไขที่แท้จริงคือการเพิ่มความจุของโฮสต์หรือ Docker VM ลดปริมาณงานพร้อมกัน หรือกระจายงาน ไม่ใช่การเพิ่มขีดจำกัดเกินกว่า RAM ที่มีอยู่