bismillah ,
hari ini saya cukup di buat bingung ketika squid proxy server kami yang harus nya membuat akses inet lebih cepat , malah terasa lambat ketika menggunakan proxy setelah coba cek , saya coba matiin dulu redirect NAT rule di mikrotik , kemudian saya coba remote squid server nya
bit@bit-X200CA:~$ ssh root@192.168.44.2
perintah yang saya lakukan adalah perintah “TOP” saya ingin melihat , proses apa yang memakan cpu atau memori yang besar
root@proxy:~# top
hasil nya , ternyata untuk penggunaan memory dari 16 Gb hampir 13 Gb yang free, walaupun load average: 13,63, 10,12, 9,68 memang tinggi ,yang artinya 13.63 (<1 menit) 10.12 (5 menit) 9,68 (15 menit) , squid service yang menjadi service utama malah hanya memakan 1,7% CPU , msih belum sya pahmi dimana masalah nya , setelah saya coba analisa setiap item informasi yang di tmpilkan , dengan coba search di mbah google ,alhamdulillah ada titik terang , ternyata Yang harus anda cermati dari top bukan cuma load memory dan %cpu, tapi ada 4 bari di bagian yang berisi info Tasks,%CPU(s), KiB Mem dan KiB swap, untuk task adalah informasi proses yang ada dalam server ,
KiB Mem adalah informasi memory , yaitu memroy terpakai,total mempry, free dan buffers.
KiB Swap , berisi informasi swap
Nah hal penting yang ada pada informasi yang di tampilkan oleh perintah “top” adalh pada %CPU(S)
%Cpu(s): 0,1 us, 0,4 sy, 0,0 ni, 36,4 id, 63,0 wa, 0,0 hi, 0,1 si, 0,0 st
beberapa pejelasan yang saya ketahui
- %us adalah penggunaan CPU oleh Task yang di jalankan user, seperti misal squid,nginx, mysql, apache, php-fpm dll. Nilai paling rendah adalah 0% (sedikit pemakaian), dan paling tinggi 100% (cpu abuse by task)
- %ni adalah jumlah penggunaan cpu oleh task yang di jalankan user, yang priority nya kita set manual, misal pada saat kita set worker proses pada saat kita install nginx webserver
- %id adalah nilai “idle” cpu. Semakin tinggi nilai ini (100%) menandakan CPU tidak sedang digunakan dan tersedia untuk dimanfaatkan kerja unutk respon yang cepat. Semakin rendah nilainya (0%) menandakan bahwa CPU sedang bekerja keras dan CPU kemungkinan tidak bisa melakukan/merespon printah(proses) yang selanjutnya dengan cepat.
- %sy adalah system cpu time , yaitu presentasi CPU time yang di gunakan pada lingkungan kernel,Nilai %sy yang tinggi mengindikasikan adanya masalah dengan config kernel dan driver server kita.
- %hi adlah hardware irq,yaitu presentasi CPU time yang di gunakan untuk menengani hardware interrupts, hardware
interrupts digenerate oleh perangkat hardware (network card, keyoard, usb) ketika membutuhkan signal tertentu terhadap CPU. - %st adalah steal time, yaitu presentasi CPU time yang di gunakan dalam lingkungan virtual, misalnya pada node vps,menunjukan dahwa resource CPU tidak tersedia untuk suatu mesin virtual karena diambil oleh mesin virtual lainnya.
- %si adalah presentasi CPU Time yang di gunakan untuk menangani software interrupts
- %wa adalah waktu tunggu (iowait) proses IO (input output) ke file/harddisk , nah hal inilah yang ada kasus saya , yang ternyata Bila Load Average an tinggi dan %wa juga tinggi, maka ini berarti bahwa ada kesibukan baca dan tulis (IO) ke file/harddisk yang menyebabkan CPU terpaksa “harus” menunggu proses baca dan tulis selesai sebelum melanjutkan ke proses berikutnya,Semakin tinggi nilai %wa mengindikasikan bahwa kecepatan IO pada Hardisk sangatlah rendah.
kita melakukan cek kecepatan I/O harddisk dengan perintah
root@proxy:~# dd if=/dev/zero of=iotest bs=64k count=16k conv=fdatasync && rm -rf iotest
dari gambar diatas ,kecepata I/O harddisk server hanya 1,2 Mb/s , yang normal nya kecepatan I/O sebuah hardisk harus lebih dari 50 Mb/s , jika tidak maka service dalam server akan mengalami high cpu load, crash, dan server susah di akses, %wa yang tinggi biasanya bisa diatasi dengan mematikan log (access/error log apache/nginx), memperbesar buffer, cache, memindah temporary file ke ram (tmpfs) yang tujuannya meminimalisir penggunaan I/O ke harddisk.
mungkin langkah pertama saya mencoba untuk memindah temporary file ke ram (tmpfs) yang tujuannya meminimalisir penggunaan I/O ke harddisk.dikarenakan I/O di RAM akan lebih cepat dari pada Hardisk , dan mengurangi akses system ke hardisk , berikut langkah yang saya lakukan untuk memindah temporary file ke ram (tmpfs) .
edit fstab
root@proxy:~# pico /etc/fstab
tambahkan
tmpfs /tmp tmpfs defaults,noexec,nosuid 0 0
di /etc/fstab
exit dan save ,kemudia kita mount
root@proxy:~# mount -a
chek dengan df -h
root@proxy:~# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 138G 78G 53G 60% / none 4,0K 0 4,0K 0% /sys/fs/cgroup udev 7,9G 4,0K 7,9G 1% /dev tmpfs 1,6G 568K 1,6G 1% /run none 5,0M 0 5,0M 0% /run/lock none 7,9G 0 7,9G 0% /run/shm none 100M 0 100M 0% /run/user /dev/sda6 94G 86G 5,3G 95% /cache-1 /dev/sda7 94G 83G 7,5G 92% /cache-2 /dev/sda8 94G 87G 4,8G 95% /cache-3 tmpfs 7,9G 0 7,9G 0% /tmp
dari hasil di atas juga terlihat kalau disk cache saya sudah penuh , mungkin ini salah satu penyebab lambat nya I/O harddisk server , akhir nya saya memutuskan untk mencoba menghapus cache squid , dan nanti akan build ulang,
pertama stop service squid
root@proxy:~# squid -k shutdown root@proxy:~# ps -e|grep squid 1424 ? 00:00:00 squid 1426 ? 02:18:39 squid 21846 ? 00:00:26 squidGuard 21847 ? 00:00:02 squidGuard 21848 ? 00:00:02 squidGuard 21849 ? 00:00:01 squidGuard 21850 ? 00:00:01 squidGuard root@proxy:~# ps -e|grep squid 1424 ? 00:00:00 squid 1426 ? 02:18:39 squid root@proxy:~# ps -e|grep squid root@proxy:~#
remove folder cache
root@proxy:/etc/apache2# rm -rf /cache-1 root@proxy:/etc/apache2# rm -rf /cache-2 root@proxy:/etc/apache2# rm -rf /cache-3
proses diatas memakan cukup banyaka waktu di karenakan ukuran cache yang cukup besar yang masing-masing mencapai lebih 80 Gb,setelah proses penghapusan selesai , kita, bisa cek dengan perintah ls di folder cache.
oh ya, setelah folder cache terhapus saya coba cek kembali kecepatan I/O disk
root@proxy:/etc/apache2# dd if=/dev/zero of=iotest bs=64k count=16k conv=fdatasync && rm -rf iotest 16384+0 records in 16384+0 records out 1073741824 bytes (1,1 GB) copied, 11,0705 s, 97,0 MB/s
kecepatan I/O kembali normal, kemudian saya build ulang folder cache dari squid dengan perintah
root@proxy:~# squid -z
cek folder cache
root@proxy:~# cd /cache-1 root@proxy:/cache-1# ls -l total 132 drwxr-x--- 1 proxy proxy 1024 Jan 11 16:02 00 drwxr-x--- 1 proxy proxy 1024 Jan 11 16:02 01 drwxr-x--- 1 proxy proxy 1024 Jan 11 16:02 02 drwxr-x--- 1 proxy proxy 1024 Jan 11 16:02 03 drwxr-x--- 1 proxy proxy 1024 Jan 11 16:02 04 drwxr-x--- 1 proxy proxy 1024 Jan 11 16:02 05 drwxr-x--- 1 proxy proxy 1024 Jan 11 16:02 06 drwxr-x--- 1 proxy proxy 1024 Jan 11 16:02 07 drwxr-x--- 1 proxy proxy 1024 Jan 11 16:02 08 drwxr-x--- 1 proxy proxy 1024 Jan 11 16:02 09 drwxr-x--- 1 proxy proxy 1024 Jan 11 16:02 0A
kemudian saya coba jalan kan kembali squid dengan opsi mode debug
root@proxy:/cache-1# squid -dN1 root@proxy:/cache-1# 2016/01/11 16:05:51| Starting Squid Cache version LUSCA_HEAD-r14942 for i686-pc-linux-gnu...
kemudian saya coba cek kembali I/O harddisk untuk coba saya pantau
alhamdulillah , kecepatan I/O masih normal , tetapi itu dalam keadaan squid belum menerima trafik dari client (redirect NAT di mikrotik belum saya aktifkan )
berikut perubahan setelah reirect NAT di mikrotik di aktifkan (squid menerima akses dari client)
root@proxy:/cache-1# dd if=/dev/zero of=iotest bs=64k count=16k conv=fdatasync && rm -rf iotest 16384+0 records in 16384+0 records out 1073741824 bytes (1,1 GB) copied, 12,7128 s, 84,5 MB/s
alhamdulillah , masih wajar 🙂 … yah bgitulah ternyata cache hardisk yang penuh sangat mempengaruhi kerja I/O dan berdampak pada load CPU yang tinggi , mudah-mudahan bermanfaat , dan mudah mudahan ada yang comment untuk memberikan cara yang lebih baik , unutk menangani cache squid yang penuh tanpa melakukan penghapusan cache object squid,
referensi:
http://www.records.asia/kenali-penyebab-load-vps-tinggi-menggunakan-top/
imple-aja.info/mengetahui-cpu-load-pada-vps-linux.html
No Comments, Be The First!