انتقل إلى المحتوى الرئيسي

الفصل 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