คุณเกือบจะอยู่ที่นั่นไม่สำคัญว่าจะเป็นเครื่องเสมือนหรือเครื่องจริงการตั้งค่าเหล่านั้นอาจเปลี่ยนแปลงได้เสมอ
ฉันจะแสดง 3 วิธี
ข้อมูลเบื้องต้นบางอย่าง:
1) จะดีกว่าถ้าใช้งานรูทหากเป็นไปได้
2) / procบน unix ไม่ใช่ระบบไฟล์จริงมันเป็นระบบไฟล์เคอร์เนลในหน่วยความจำ แต่ดูเหมือนว่าจะเป็นระบบไฟล์ดิสก์ปกติ คุณสามารถเรียกมันว่า 'ระบบแฟ้มปลอม' หรือ 'ระบบแฟ้มพิเศษ' คุณไม่สามารถแก้ไขไฟล์ปลอมเหล่านั้นด้วย vi หรือโปรแกรมแก้ไขอื่น ๆ เพราะไม่ใช่ไฟล์พวกเขาดูเหมือนไฟล์ ฉันติดอยู่กับปัญหาเดียวกันปีที่ผ่านมา
แต่มันง่ายในการเปลี่ยนค่าของพวกเขาเพียงแค่ต้องการ 'กลศาสตร์' อีกชนิดหนึ่งเพื่อแก้ไข
ฉันจะอธิบาย: ก่อนอื่นต้องเป็น root: (sudo ทำงานใน distros บางอย่าง แต่ไม่ได้อยู่ใน distros อื่น ๆ อย่างที่คุณลองวิธีแรกนี้เป็นสากลและใช้ได้กับ Linux, MacOS หรือ Unix ใด ๆ ก็ตาม . หวังว่าคุณจะสามารถเข้าถึงรหัสผ่านรูทได้
ดำเนินการทันทีที่:
$ su root
ป้อนรหัสผ่านรูท
ตอนนี้คุณเป็นรูทลองตรวจสอบค่าปัจจุบันของ: / proc / sys / vm / max_map_count
$ cat /proc/sys/vm/max_map_count
65536
มาเปลี่ยนกันเถอะ:
echo 262144 > /proc/sys/vm/max_map_count
ตรวจสอบกันเลย:
cat /proc/sys/vm/max_map_count
262144
มันจบแล้ว! และมันถูกนำไปใช้และใช้งานได้แล้ว ด้วยการเปลี่ยนค่าของไฟล์หลอกใด ๆ ภายใต้ / proc การตั้งค่าจะเปิดใช้งานทันที แต่พวกเขาจะไม่คงอยู่หลังจากรีบูต คุณสามารถเล่นกับค่าและวัดการเปลี่ยนแปลงประสิทธิภาพได้ที่elasticsearhหรือแอปพลิเคชันหรือตัวชี้วัดระบบอื่น ๆ ไปปรับระบบของคุณเขียนค่าลงในกระดาษบางแผ่นรักษาค่าที่ดีที่สุด ในความผิดพลาดใด ๆ ให้รีบูตและพวกเขาทั้งหมดจะกลับไปเป็นค่าดั้งเดิมและเริ่มต้นอีกครั้งจนกว่าค่าที่ต้องการทั้งหมดจะดีที่สุด มีพารามิเตอร์ที่ปรับได้ดิสก์และหน่วยความจำจำนวนมากภายใต้ / proc และพวกเขาสร้างความแตกต่างและประสิทธิภาพที่เพิ่มขึ้นอย่างมากหากคุณปรับมันให้ดี (และมีเวลาทำ) คุณกำลังอยู่บนทางที่ถูกต้อง.
เมื่อพอใจแล้วให้พวกมันถาวร:
วิธีแรก:
ใช้/etc/rc.local
vi /etc/rc.local
วางพารามิเตอร์ทั้งหมดไว้ในไฟล์ rc.local ตัวอย่าง:
echo 220000000 > /proc/sys/vm/dirty_background_bytes
echo 320000000 > /proc/sys/vm/dirty_bytes
echo 0 > /proc/sys/vm/dirty_background_ratio
echo 0 > /proc/sys/vm/dirty_ratio
echo 500 > /proc/sys/vm/dirty_writeback_centisecs
echo 4500 > /proc/sys/vm/dirty_expire_centisecs
echo 1 > /proc/sys/net/ipv4/tcp_rfc1337
echo 10 > /proc/sys/vm/swappiness
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
echo 120 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 0 > /proc/sys/vm/zone_reclaim_mode
echo deadline > /sys/block/sda/queue/scheduler
echo 8 > /sys/class/block/sda/queue/read_ahead_kb
echo 1048575 > /proc/sys/vm/max_map_count
ตัวแก้ไข exit ของ vi กำลังบันทึกไฟล์
พารามิเตอร์เหล่านั้นจะถูกตั้งค่าในการรีบูตทุกครั้งหลังจากที่บริการ init ทั้งหมดเริ่มต้นขึ้นก่อนที่ข้อความแจ้งการเข้าสู่ระบบจะปรากฏขึ้น
( ไฟล์/etc/rc.localถูกเรียกใช้หลังจากบริการเริ่มต้นของ linux ทั้งหมดอาจไม่ทำงานหาก elasticsearch เริ่มต้นก่อนเป็นบริการ แต่วิธีนี้จะมีประโยชน์ในการตั้งค่าอื่นหากคุณต้องการในอนาคตหรือคุณสามารถใช้เช่นนี้ โดยใส่ไว้ในสคริปต์เริ่มต้นของ elasticsearch เนื่องจากสคริปต์ init ทำงานเป็นรูทดังนั้นจึงเป็นไวยากรณ์เดียวกันข้างต้นเพื่อใช้ภายในสคริปต์ init)
คุณสามารถคัดลอกและวางเพื่อเปลี่ยนแปลงได้ทันที พารามิเตอร์ด้านบนนั้นถูกต้องปรับและทำงานบนเซิร์ฟเวอร์ apache Cassandra ของฉัน หากคุณต้องการลองเป็นจุดเริ่มต้นในการปรับแต่งของคุณ
วิธีที่สองเพื่อทำให้ถาวร:
ตอนนี้พารามิเตอร์จะถูกตั้งค่าก่อนที่จะเริ่มบริการใด ๆ บน linux
แก้ไข/etc/sysctl.confใส่พารามิเตอร์เข้าไป
vm.max_map_count=1048575
vm.zone_reclaim_mode=0
vm.dirty_background_bytes=220000000
vm.dirty_background_ratio=0
vm.dirty_bytes=320000000
vm.dirty_ratio=0
vm.swappiness=10
ไปกับคนอื่น ๆ ต่อไปบันทึก/etc/sysctl.confรีบูทเซิร์ฟเวอร์ของคุณเพื่อใช้การเปลี่ยนแปลงหรือดำเนินการ: sysctl -pเพื่อใช้การเปลี่ยนแปลงโดยไม่ต้องรีบูต พวกเขาจะถาวรตลอดการเรียบ
วิธีการสองวิธีข้างต้นเป็นวิธีที่สะดวกที่สุด มีอีกอันหนึ่งและอาจใช้ได้กับคุณโดยใช้sudoเกือบเหมือนที่คุณทำ:
แทน:
sudo sysctl -w vm.max_map_count=262144
ลอง:
echo 262144 | sudo tee /proc/sys/vm/max_map_count
มันทำงานบนอูบุนตู
ตรวจสอบ:
user@naos:~$ cat /proc/sys/vm/max_map_count
262144
หวังว่าฉันได้ช่วยทางอย่างน้อยโดยให้ 3 ตัวเลือกที่แตกต่างกันเพื่อจัดการกับปัญหาเนื่องจากเกือบคำถามของคุณปี;)
ขอแสดงความนับถือ Rafael Prado