כיצד להוסיף מרווח Swap ב-Ubuntu 22.04

הקדמה

אחת הדרכים להגן על מול מסוכנות שגיאות "אוט ופי ממורי" ביישומים היא להוסיף מעט מקום בשרת שלך. במדריך זה, נכסה כיצד להוסיף קובץ החלפה לשרת Ubuntu 22.04.

מהו החלפה?

החלפה היא חלק מאחסון הדיסק הוקצה למערכת ההפעלה לשמור זמנית נתונים שהיא כבר אינה יכולה להחזיק בזיכרון המהיר (RAM). זה מאפשר לך להגדיל את כמות המידע ששרת שלך יכול לשמור בזיכרון העבודה שלו, עם כמה תנאים. המרחב להחלפה בדיסק קשיח יימצא בשימוש בעיקר כאשר כבר אין מספיק מקום ב-RAM להחזיק נתוני יישומים בשימוש.

המידע שיוכתב לדיסק יהיה אט משמעותית מהמידע שנשמר ב-RAM, אך המערכת הפעלה תעדיף לשמור נתוני יישומים בשימוש בזיכרון ולהשתמש בהחלפה עבור הנתונים הישנים. בסך הכל, יש ביטחון טוב במערכת להחלפה כמנקודת מחסה כאשר ה-RAM של המערכת שלך נגמר, במערכות עם אחסון שאינו SSD זמין.

שלב 1 – בדיקת המערכת למידע על התמר

לפני שנתחיל, אפשר לבדוק אם במערכת כבר יש מקום תמר זמין. ניתן להגדיר מספר קבצי תמר או מספרי מחיצות תמר, אך בדרך כלל יש לנו צורך באחד בלבד.

ניתן לבדוק אם במערכת קיים תמר מוגדר על ידי הקלדת:

  1. sudo swapon --show

אם אין תגובה מהמערכת, זה אומר שאין כרגע מקום תמר זמין במערכת שלך.

ניתן לאמת שאין תמר פעיל באמצעות הכלי free:

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi Swap: 0B 0B 0B

כפי שניתן לראות בשורת התמר בפלט, אין תמר פעיל במערכת.

שלב 2 – בדיקת המרחב הפנוי במחיצת הכונן הקשיח

לפני שניצור את קובץ התמר שלנו, נבדוק את שימוש הכונן הנוכחי כדי לוודא שיש לנו מספיק מקום. נעשה זאת על ידי הקלדת:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 474M 0 474M 0% /dev tmpfs 99M 932K 98M 1% /run /dev/vda1 25G 1.4G 23G 7% / tmpfs 491M 0 491M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 491M 0 491M 0% /sys/fs/cgroup /dev/vda15 105M 3.9M 101M 4% /boot/efi /dev/loop0 55M 55M 0 100% /snap/core18/1705 /dev/loop1 69M 69M 0 100% /snap/lxd/14804 /dev/loop2 28M 28M 0 100% /snap/snapd/7264 tmpfs 99M 0 99M 0% /run/user/1000

התקן עם / בעמודת המשובץ ב הוא הכונן שלנו במקרה זה. יש לנו מספיק מקום זמין בדוגמה זו (רק 1.4G בשימוש). השימוש שלך כנראה יהיה שונה.

אף על פי שישנן רבות ערוצים לגבי גודל החלפת הזיכרון המתאים, זה תלוי בהעדפות האישיות שלך ובדרישות היישום שלך. בכלל, סכום שזהה או כפול לסכום הזיכרון הפיזי במערכת שלך הוא נקודת התחלה טובה. כלל נוסף הוא שכל דבר מעל 4 ג'יגה של חליפין כנראה מיותר אם אתה פשוט משתמש בו כשימוש חילופי לזיכרון.

שלב 3 – יצירת קובץ חליפין

עכשיו שאנו יודעים את המקום הפנוי בכונן הקשיח שלנו, אנו יכולים ליצור קובץ חליפין במערכת הקבצים שלנו. נאזין קובץ בגודל הרצוי בשם swapfile בתיקיית השורש (/) שלנו.

הדרך הטובה ביותר ליצור קובץ חליפין היא עם תוכנת fallocate. פקודה זו יוצרת מיידית קובץ בגודל המצויין.

מכיוון שהשרת בדוגמתנו מגיע עם 1G של זיכרון, ניצור קובץ בגודל של 1G במדריך זה. ניתן להתאים את זה לצרכי השרת שלך:

  1. sudo fallocate -l 1G /swapfile

ניתן לוודא שסכום המרווח הנכון נשמר על ידי הקלדה:

  1. ls -lh /swapfile
  1. -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

הקובץ שלנו נוצר עם סכום המרווח הנכון הוקצה.

שלב 4 – הפעלת קובץ החליפין

עכשיו שיש לנו קובץ בגודל הנכון זמין, עלינו להפוך את זה לשטח מעבר בפועל.

ראשית, עלינו לנעול את ההרשאות של הקובץ כך שרק משתמשים עם הרשאות שורש יוכלו לקרוא את התוכן. זה מונע ממשתמשים רגילים לגשת לקובץ, מה שיכול להיות לו השלכות אבטחה משמעותיות.

לעשות את הקובץ נגיש רק למשתמש root על ידי הקלדה:

  1. sudo chmod 600 /swapfile

לוודא את שינויי ההרשאות על ידי הקלדה:

  1. ls -lh /swapfile
Output
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

כפי שניתן לראות, רק למשתמש ה- root יש את הדגלים לקריאה וכתיבה מופעלים.

ניתן כעת לסמן את הקובץ כשטח מעבר על ידי הקלדה:

  1. sudo mkswap /swapfile
Output
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

לאחר הסימון של הקובץ, ניתן לאפשר את השימוש בקובץ המקום, מאפשרת למערכת שלנו להתחיל להשתמש בו:

  1. sudo swapon /swapfile

לוודא שהשטח המשובץ זמין על ידי הקלדה:

  1. sudo swapon --show
Output
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2

ניתן לבדוק שוב את פלט הכלי free כדי לוודא את הממצאים שלנו:

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi Swap: 1.0Gi 0B 1.0Gi

השטח המשובץ שלנו הוגדר בהצלחה והמערכת הפעילה שלנו תתחיל להשתמש בו ככל צורך.

שלב 5 – עשיית הקובץ של המשובץ קבעית

השינויים האחרונים שלנו הפעילו את קובץ המשובץ להפעלה הנוכחית. אך, אם נאפשר מחדש, השרת לא ישמור על הגדרות המשובץ אוטומטית. נוכל לשנות זאת על ידי הוספת קובץ המשובץ לקובץ ה- /etc/fstab שלנו.

נגבה את קובץ ה- /etc/fstab במידה ומשהו יקרה:

  1. sudo cp /etc/fstab /etc/fstab.bak

הוסף את מידע קובץ ההחלפה לסוף קובץ /etc/fstab שלך על ידי הקלדה:

  1. echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

בשלב הבא נבקר בכמה הגדרות שניתן לעדכן כדי לכוון את מרחב ההחלפה שלנו.

שלב 6 – כוונון הגדרות ההחלפה שלך

קיימות כמה אפשרויות שאפשר להגדיר שיש להשפעה על ביצועי המערכת שלך בעת התמודדות עם מרחב ההחלפה.

כיוון מאפיין ה Swappiness

הפרמטר swappiness מגדיר כמה פעמים המערכת שלך מחליפה נתונים מתוך ה-RAM למרחב ההחלפה. זוהי ערך בין 0 ל-100 שמייצג אחוז.

עם ערכים קרובים לאפס, הקרנל לא יחליף נתונים לדיסק אלא רק כאשר זה בהחלט נחוץ. זכור, אינטראקציות עם קובץ ההחלפה הן "יקרות" במובן שהן לוקחות הרבה זמן יותר מאינטראקציות עם ה-RAM ויכולות לגרום להפחתה משמעותית בביצועים. להגיד למערכת שלא להסתמך על ההחלפה הרבה תיעשה כללית את המערכת שלך מהירה יותר.

ערכים שקרובים יותר ל-100 ינסו לשים יותר נתונים בהחלפה על מנת לשמור על יותר מקום ב-RAM פנוי. תלוי בפרופיל הזיכרון של היישום שלך או במה שאתה משתמש בשרת שלך לצרכי, זה עשוי להיות יותר טוב במקרים מסוימים.

ניתן לראות את ערך ה-swappiness הנוכחי על ידי הקלדת:

  1. cat /proc/sys/vm/swappiness
Output
60

עבור מחשב שולחני, הגדרת swappiness של 60 אינה ערך רע. לשרת, עשוי להיות רצוי להזיז את זה קרוב יותר ל-0.

ניתן להגדיר את ה-swappiness לערך שונה באמצעות פקודת sysctl.

לדוגמה, כדי להגדיר את ה-swappiness ל-10, ניתן להקליד:

  1. sudo sysctl vm.swappiness=10
Output
vm.swappiness = 10

הגדרה זו תישאר קיימת עד לאיתחול הבא. ניתן להגדיר את הערך באופן אוטומטי באיתחול על ידי הוספת השורה לקובץ /etc/sysctl.conf שלנו:

  1. sudo nano /etc/sysctl.conf

בתחתית הקובץ, ניתן להוסיף:

/etc/sysctl.conf
vm.swappiness=10

שמור וסגור את הקובץ כאשר תסיימו.

כיוון ערך לחץ המטמון

ערך נוסף הקשור שייך שעשוי להיות רצוי לשנות הוא vfs_cache_pressure. הגדרה זו מגדירה כמה המערכת תבחר לאחסן מידע על inode ו-dentry על פני מידע אחר.ישות בתקייה.קובץ

בגדול, זהו מידע גישה אודות המערכת הקבצים. כלומר זה כללית עולה למערכת להשתמש במערכת הזמינה עליה. ניתן לראות את הערך הנוכחי על ידי שאילתת המערכת proc שוב:

  1. cat /proc/sys/vm/vfs_cache_pressure
Output
100

כפי שהוא מוגדר כעת, המערכת שלנו מסירה מידע inode מהמטמון בדיוק כדי. ניתן להגדיר את זה להגדרה יותר צנועה כמו 50 על ידי הקלדה:

  1. sudo sysctl vm.vfs_cache_pressure=50
Output
vm.vfs_cache_pressure = 50

שוב, זה תקף רק עבור ההפעלה הנוכחית שלנו. אנו יכולים לשנות זאת על ידי הוספתו לקובץ התצורה שלנו כפי שעשינו עם הגדרת ה-swappiness שלנו:

  1. sudo nano /etc/sysctl.conf

בתחתית הקובץ, הוסף את השורה שמציינת את הערך החדש שלך:

/etc/sysctl.conf
vm.vfs_cache_pressure=50

שמור וסגור את הקובץ כאשר תסיים.

מסקנה

בעקבות השלבים במדריך זה תקבל קצת מרווח הנשימה במקרים שאחרת יכלו להוביל לחריגות מחוץ לזיכרון. מקום פיצול יכול להיות מאוד שימושי כדי למנוע חלק מהבעיות הנפוצות האלו.

אם אתה נתקל בשגיאות OOM (חוסר זיכרון) או אם אתה מגלה כי המערכת שלך אינה מסוגלת להשתמש ביישומים שאתה צריך, הפתרון הטוב ביותר הוא לאופטמיזציה של הקונפיגורציות של היישומים שלך או לשדרג את השרת שלך.

Source:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04