كيف تستفيد شركة المرام من الذاكرة العالية في سيرفرات بروكسموكس عبر تهيئة ZFS ARC Cache
في شركة المرام، نوظّف ذواكر RAM عالية (حتى 3 تيرابايت في بعض السيرفرات) لتمكين ZFS ARC Cache ضمن Proxmox VE، ما يسرّع قواعد البيانات والتطبيقات ويُطيل عمر الأقراص.
ما هو ZFS ARC Cache؟
- ARC كاش ذكي داخل RAM يقلّل الاعتماد على الأقراص.
- كلما زادت RAM، زاد حجم البيانات المُخزّنة في الذاكرة وسرعة القراءة.
Min و Max للـ ARC
- ARC Min: الحد الأدنى الذي لا ينخفض عنه الكاش.
- ARC Max: الحد الأقصى الذي لن يتجاوزه الكاش.
- يتأرجح ARC ديناميكيًا بين القيمتين حسب ضغط الذاكرة.
النسبة الموصى بها من الذاكرة
- عموماً: 25%–50% من RAM للـ ARC.
- خادم تخزين بحت: حتى 60–70%.
- خادم تطبيقات/قواعد بيانات/VMs: اكتفِ بـ 20–30%.
ضبط القيم الفورية (Runtime)
echo 19327352832 > /sys/module/zfs/parameters/zfs_arc_min # 18 GiB
echo 38654705664 > /sys/module/zfs/parameters/zfs_arc_max # 36 GiB
التثبيت الدائم باستخدام nano (modprobe)
- افتح الملف:
nano /etc/modprobe.d/zfs-arc.conf - أضف:
options zfs zfs_arc_min=19327352832 zfs_arc_max=38654705664 - احفظ واخرج: Ctrl+O ثم Enter، وبعدها Ctrl+X.
- حدّث الإقلاع وأعد التشغيل:
update-initramfs -u -k all reboot
???? بديل: تثبيت الإعداد عبر خدمة systemd
يمكنك تعديل ملف الخدمة الحالي ليضبط min وmax معًا. مثال (Min=64GiB, Max=128GiB):
nano /etc/systemd/system/set-arc-max.service
[Unit]
Description=Set ZFS ARC min=64G max=128G
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo 68719476736 > /sys/module/zfs/parameters/zfs_arc_min"
ExecStart=/bin/sh -c "echo 137438953472 > /sys/module/zfs/parameters/zfs_arc_max"
[Install]
WantedBy=multi-user.target
ثمّ:
systemctl daemon-reload
systemctl enable set-arc-max.service
systemctl restart set-arc-max.service
ملاحظة: تستطيع استبدال القيم بقيم أخرى مثل Min=18GiB (19327352832) و Max=36GiB (38654705664) وفقاً لحجم RAM ودور الخادم.
فحص الكاش (ARC) بسرعة
# إظهار الحدود:
cat /proc/spl/kstat/zfs/arcstats | egrep "c_min|c_max"
# الحجم المستخدم الآن:
cat /proc/spl/kstat/zfs/arcstats | grep "^size"
# ملخص سريع (GiB + نسبة):
C_MIN=$(grep "^c_min" /proc/spl/kstat/zfs/arcstats | awk '{print $3}')
C_MAX=$(grep "^c_max" /proc/spl/kstat/zfs/arcstats | awk '{print $3}')
SIZE=$(grep "^size[[:space:]]" /proc/spl/kstat/zfs/arcstats | awk '{print $3}')
printf "ARC Min : %.1f GiB\nARC Max : %.1f GiB\nARC Used: %.1f GiB (%.2f%%)\n" \
"$(echo "$C_MIN/1073741824" | bc -l)" \
"$(echo "$C_MAX/1073741824" | bc -l)" \
"$(echo "$SIZE/1073741824" | bc -l)" \
"$(echo "100*$SIZE/$C_MAX" | bc -l)"
# كفاءة الكاش:
H=$(grep '^hits' /proc/spl/kstat/zfs/arcstats | awk '{print $3}')
M=$(grep '^misses' /proc/spl/kstat/zfs/arcstats | awk '{print $3}')
echo "ARC Efficiency: $(echo "scale=2; 100*$H/($H+$M)" | bc -l) %"
سكربت تقرير شامل arc-report.sh
أضف سكربت جاهز يطبع Min/Max/Used/%/Efficiency، مع وضع مراقبة حيّة:
nano /usr/local/bin/arc-report.sh
#!/bin/bash
# ZFS ARC Detailed Report
command -v bc >/dev/null 2>&1 || { echo "bc مفقود: apt install -y bc"; exit 1; }
arc_stats="/proc/spl/kstat/zfs/arcstats"
getv(){ grep -E "^$1( |$)" "$arc_stats" | awk '{print $3}'; }
C_MIN=$(getv c_min); C_MAX=$(getv c_max)
SIZE=$(grep -E "^size[[:space:]]" "$arc_stats" | awk '{print $3}')
HITS=$(getv hits); MISSES=$(getv misses); TOTAL=$((HITS + MISSES))
USEDP=$(echo "scale=2; 100*$SIZE/$C_MAX" | bc -l)
EFF=$( [ "$TOTAL" -gt 0 ] && echo "scale=2; 100*$HITS/$TOTAL" | bc -l || echo "0")
echo "===== ZFS ARC Report ====="
printf "ARC Min : %.1f GiB\n" "$(echo "$C_MIN/1073741824" | bc -l)"
printf "ARC Max : %.1f GiB\n" "$(echo "$C_MAX/1073741824" | bc -l)"
printf "ARC Used : %.1f GiB (%.2f%%)\n" "$(echo "$SIZE/1073741824" | bc -l)" "$USEDP"
printf "ARC Efficiency: %.2f %%\n" "$EFF"
printf "ARC Hits : %'d\n" "$HITS"
printf "ARC Misses : %'d\n" "$MISSES"
if [ "$1" = "-w" ]; then while sleep 2; do clear; "$0"; done; fi
chmod +x /usr/local/bin/arc-report.sh
# تقرير فوري:
arc-report.sh
# مراقبة حيّة:
arc-report.sh -w
فوائد تهيئة ARC Cache
- ✅ تسريع قواعد البيانات (MariaDB/PostgreSQL) والتطبيقات (Laravel/Odoo/Elasticsearch).
- ✅ تقليل عمليات القراءة/الكتابة على الأقراص → إطالة عمر HDD/SSD.
- ✅ تقليل استهلاك الطاقة بفضل خفض I/O على الأقراص.
- ✅ تجربة مستخدم أسرع وثابتة تحت الضغط.
???? مثال عملي من سيرفرات المرام
| نوع السيرفر | RAM | ARC Min | ARC Max | نسبة من RAM | كفاءة (Hits%) | النتيجة |
|---|---|---|---|---|---|---|
| 128 GiB | 128 GiB | 16 GiB | 24 GiB | 12–18% | 95% | أداء جيد للتطبيقات المتوسطة |
| 256 GiB | 256 GiB | 32 GiB | 128 GiB | 50% | 97% | تسريع كبير لقواعد البيانات |
| 512 GiB | 512 GiB | 64 GiB | 192 GiB | 37% | 96% | مثالي للأرشفة وElastic |
| Enterprise | 3 TiB | 128 GiB | 1.5 TiB | 50% | 97–98% | أداء فائق لآلاف المستخدمين |
خاتمة
اعتماد المرام على ZFS ARC مع ضبط Min/Max عبر modprobe أو systemd ومراقبته بوساطة سكربت arc-report.sh، يضمن أداء أسرع، استقرار أعلى، وإطالة عمر الأقراص لعملائنا.