الفصل 12.2 - ضبط الأداء
أهداف التعلم
في نهاية هذا الفصل، ستكون قادرًا على:
- تحديد نقاط الاختناق
- تحسين أداء CPU
- تحسين الذاكرة
- تحسين إدخال/إخراج القرص
- تكوين إعدادات kernel
- مراقبة الأداء
تحديد المشاكل
أدوات التشخيص
# CPU
top, htop, mpstat
cat /proc/stat
# الذاكرة
free -h
vmstat
cat /proc/meminfo
# القرص
iostat -x
iotop
df -h
# الشبكة
iftop, nethogs
ss -i
المقاييس الرئيسية
# متوسط الحمل
uptime
# التفسير: < عدد CPUs
# خمول CPU
mpstat 1
# الهدف: > 20% خمول
# الذاكرة المتاحة
free -h
# الهدف: > 10% حر
# انتظار I/O
iostat -x 1
# الهدف: < 5%
تحسين CPU
أولويات العمليات
# ضبط قيم nice
nice -n 10 commande # أولوية منخفضة
nice -n -10 commande # أولوية عالية (root)
# إعادة ضبط nice لعملية موجودة
renice 10 PID
renice 10 -u user1
تقارب CPU
# تعيين عملية إلى CPU محدد
taskset -c 0,1 commande
# عملية موجودة
taskset -cp 0,1 PID
حدود CPU
# cgroups v2
systemd-run --slice=my-slice --property=CPUQuota=50% commande
# cpuset
cset set -c 0-3 -s my-set
cset proc -m -p PID -s my-set
تحسين الذاكرة
Swap
# عرض swap
free -h
swapon --show
# ضبط swappiness
# /etc/sysctl.conf
vm.swappiness=10 # 0-100، أقل = أقل swap
# تطبيق
sudo sysctl -p
الذاكرة المؤقتة والمخزن المؤقت
# تفريغ الذاكرة المؤقتة (إذا لزم الأمر)
sync
echo 3 | sudo tee /proc/sys/vm/drop_caches
# التحقق من الاستخدام
free -h
حدود الذاكرة
# ulimit
ulimit -v 1000000 # 1GB بالكيلوبايت
# cgroups
systemd-run --slice=my-slice --property=MemoryLimit=1G commande
تحسين I/O
أنظمة الملفات
# اختيار FS المناسب
# - ext4: عام
# - xfs: ملفات كبيرة
# - btrfs: لقطات
# خيارات التركيب
# /etc/fstab
/dev/sda1 /data xfs defaults,noatime 0 2
# noatime: لا تحديث atime (الأداء)
مجدول I/O
# عرض المجدول الحالي
cat /sys/block/sda/queue/scheduler
# تغيير المجدول
echo deadline > /sys/block/sda/queue/scheduler
# دائم: kernel parameter
# elevator=deadline
RAID و LVM
# RAID للأداء
# - RAID 0: أداء (بدون تكرار)
# - RAID 10: أداء + تكرار
# LVM للمرونة
# - تمديد الأحجام
# - لقطات
إعدادات Kernel
sysctl
# عرض الإعدادات
sysctl -a
# تعديل مؤقت
sudo sysctl vm.swappiness=10
# دائم: /etc/sysctl.conf
vm.swappiness=10
net.core.rmem_max=16777216
net.core.wmem_max=16777216
# تطبيق
sudo sysctl -p
إعدادات الشبكة
# /etc/sysctl.conf
# تحسين TCP
net.core.somaxconn=1024
net.ipv4.tcp_max_syn_backlog=2048
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_time=300
إعدادات الذاكرة
# /etc/sysctl.conf
vm.swappiness=10
vm.dirty_ratio=15
vm.dirty_background_ratio=5
تحسين الخدمات
الخدمات غير الضرورية
# عرض الخدمات النشطة
systemctl list-units --type=service --state=running
# تعطيل الخدمات غير الضرورية
sudo systemctl disable service-name
sudo systemctl stop service-name
حدود الموارد
# ملف وحدة systemd
[Service]
MemoryLimit=512M
CPUQuota=50%
IOWeight=100
مراقبة الأداء
سكربتات المراقبة
#!/bin/bash
# مراقبة الأداء
echo "=== CPU ==="
top -bn1 | grep "Cpu(s)"
mpstat 1 1
echo "=== الذاكرة ==="
free -h
vmstat -s
echo "=== القرص ==="
iostat -x 1 1
df -h
echo "=== الشبكة ==="
ss -i
تنبيهات الأداء
#!/bin/bash
# تنبيهات الأداء
# CPU
CPU_IDLE=$(mpstat 1 1 | tail -1 | awk '{print $NF}')
if (( $(echo "$CPU_IDLE < 20" | bc -l) )); then
echo "تنبيه: خمول CPU عند ${CPU_IDLE}%"
fi
# الذاكرة
MEM_FREE=$(free | grep Mem | awk '{printf "%.0f", $4/$2 * 100}')
if [ "$MEM_FREE" -lt 10 ]; then
echo "تنبيه: الذاكرة الحرة عند ${MEM_FREE}%"
fi
ملخص
في هذا الفصل، تعلمت:
التشخيص: أدوات تحديد نقاط الاختناق
CPU: الأولويات، التقارب، الحدود
الذاكرة: Swap، الذاكرة المؤقتة، الحدود
I/O: FS، المجدول، RAID
Kernel: sysctl، إعدادات الشبكة/الذاكرة
الخدمات: تعطيل غير الضرورية، الحدود
المراقبة: سكربتات، تنبيهات الأداء
الخطوات التالية
الفصل 12.3: الأتمتة الكاملة
نهاية الدورة: ملخص
تم إنشاء الفصل في: ديسمبر 2024