Kamis, 28 April 2011

Swap mengecil di Solaris 8, gimana ya solusinya?

Semmangat pagi menjelang siang,

NgoprekUNIX baru aja menuntaskan problem aneh di Solaris 8. Soalnya aneh banget problemnya neh CommUNIXy... Coba deh ditelaah work around symptom berikut :

  1. Server hanya bisa diakses via TELNET/FTP   
  2. Semua user tidak bisa login via TELNET        --- wah, ini sih karena user locked/disabled?
  3. Semua user bisa login via FTP                      --- nah lho, gak masalah dong usernya? (@#$%^&)
So, ada solusinya gak neh?

Setelah mencoba login terus, alhamdulillah satu user bisa tembus masuk shell. Langsung deh NgoprekUNIX tancap gas sebagai ROOT via sudo soalnya gak tahu password ROOT-nya. Jadi inget komentar di tulisan tantang raibnya password root di sini. Intinya, solusi untuk raibnya password root adalah dengan sudo. Eit, back to focus...

Setelah dapat root apa yang musti dilakukan? Seperti biasa, NgoprekUNIX akan menganalisis dengan bebrapa poin berikut :
  • Penggunaan disk pada file system
  • Pesan error di /var/adm/messages
  • Diagnostik hardware problem
  • Utilisasi CPU dan memory (termasuk swap)
Berikut hasilnya :

Penggunaan disk
Pada umumnya kasus tidak bisa login yang tidak disebabkan bukan oleh malfungsi dari user tersebut dipicu oleh penuhnya file system bawaan OS (/, /var, /opt, /usr, /tmp). Nah, hasil penerawangan NgoprekUNIX gagal menemukan kunci jawaban dari step pertama ini.

# df -gI  k
Filesystem            kbytes    used   avail capacity  Mounted on
/dev/dsk/c0t2d0s0     241599  148217   69223    69%    /
/dev/dsk/c0t2d0s6    4130982 2392830 1696843    59%    /usr
/proc                      0       0       0     0%    /proc
mnttab                     0       0       0     0%    /etc/mnttab
fd                         0       0       0     0%    /dev/fd
/dev/dsk/c0t2d0s5    4130982  360288 3729385     9%    /var
swap                    2992      24    2968     1%    /var/run
/dev/dsk/c0t2d0s4    2055463   67121 1926679     4%    /opt
swap                    3368     400    2968    12%    /tmp
/dev/dsk/c0t2d0s7    25826376 12589113 12979000    50%    /export/spare


Semua utilisasi disk menunjukkan kondisi aman dan terkendali.


Pesan error di /var/adm/messages
Dari sini NgoprekUNIX cukup mendapat informasi yang memberikan titik cerah sekaligus membingungkan. Pasalnya, error secara berulang kali menunjukkan bahwa terjadi kehabisan swap dan /tmp penuh. Koq bisa ya? Di atas tadi gen muda sudah lihat tidak ada masalah disk usage toh? Saya pun terpaksa mengulangi kembali investigasinya...


Apr 28 08:15:54 tuxdevksi1 tmpfs: [ID 518458 kern.warning] WARNING: /tmp: File system full, swap space limit exceeded
Apr 28 08:15:54 tuxdevksi1 last message repeated 3 times
Apr 28 08:18:54 tuxdevksi1 genunix: [ID 470503 kern.warning] WARNING: Sorry, no swap space to grow stack for pid 7494 (login)
# cd /tmp
# ls -l
total 816
srwxrwxrwx   1 root     root           0 Aug 21  2010 jd_sockV6
-rw-------   1 devsss   dev            0 Dec 20 21:21 mpImaGJH
-rw-------   1 root     other          0 Apr 28 08:18 mpQGayNo
-rw-------   1 devsss   dev            0 Nov 15 18:53 mptraqGT
-rw-rw-r--   1 root     sys         3328 Apr 28 08:19 ps_data
-rw-------   1 root     other          7 Apr 28 08:18 sman_RGayNo
drwx------   2 root     root         182 Aug 21  2010 smc898
drwxrwxrwx   2 devsss   dev          117 Apr 26 18:25 tx000a33028007
-rw-rw-r--   1 root     sys       377740 Oct 20  2010 ups_data
# df -k .
Filesystem            kbytes    used   avail capacity  Mounted on
swap                    1776     408    1368    23%    /tmp          ç tidak penuh !!!
# swap -l
swapfile             dev  swaplo blocks   free
/dev/dsk/c0t2d0s1   136,1      16 4198304 520112       ç swap tidak habis !!!
# uptime
  8:25am  up 250 day(s),  4:24,  2 users,  load average: 0.57, 0.55, 0.59

Mungkin masalahnya karena uptime server sudah terlalu lama kali ya... Harus direstart neh biar server refresh... Mungkin banyak penggunaan memory yang gantung... Sabar-sabar, sebelum itu musti dipastikan tidak ada kerusakan pada hardware. Kita lanjut ya...

Diagnostik hardware problem
Mengingat problem ini terjadi di Solaris 8, maka path untuk koman "prtdiag" tidak ditemukan pada tempat biasanya. Soalnya tadi waktu jalankan "sudo su" tidak pakai "-" sehingga profil ROOT tidak ikut. Artinya, profil yang ikut adalah profil user biasa punya NgoprekUNIX. Untuk malah ini, ada 2 cara yaitu login ulang dengan "sudo su -" atau dengan cari path-nya dengan "find / -name prtdiag".

# which prtdiag
no prtdiag in /usr/bin /bin /usr/sbin /sbin /usr/local/bin /usr/sbin /usr/local/bin /usr/local/sbin . /etc

# find / -name prtdiag
/usr/platform/sun4u/sbin/prtdiag
/usr/platform/SUNW,Sun-Fire-V240/sbin/prtdiag
/usr/platform/SUNW,Sun-Fire-V250/sbin/prtdiag

--- [di break contl+C]
# /usr/platform/sun4u/sbin/prtdiag -v
System Configuration:  Sun Microsystems  sun4u Sun Fire V100 (UltraSPARC-IIe 500MHz)
System clock frequency: 100 MHz
Memory size: 2048 Megabytes

========================= CPUs =========================

                    Run   Ecache   CPU    CPU
Brd  CPU   Module   MHz     MB    Impl.   Mask
---  ---  -------  -----  ------  ------  ----
 0     0     0      500     0.2   13       1.4


========================= IO Cards =========================

     Bus#  Freq
Brd  Type  MHz   Slot  Name                              Model
---  ----  ----  ----  --------------------------------  ----------------------
 0   PCI-0  33     0   dma-isadma                                             
 0   PCI-0  33     0   rtc-m5819                         m5819                
 0   PCI-0  33     0   power-acpi-power                                       
 0   PCI-0  33     0   SUNW,lomh                                              
 0   PCI-0  33     0   serial-su16550                                         
 0   PCI-0  33     0   serial-su16550                                         
 0   PCI-0  33     0   flashprom                         SUNW,258-7883        
 0   PCI-0  33     0   i2c-i2c-smbus                                          
 0   PCI-0  33     0   ppm-SUNW,smbus-ppm                                     
 0   PCI-0  33     0   beep-SUNW,smbus-beep                                   
 0   PCI-0  33     0   fan-control-SUNW,smbus-fan-contr+                      


No failures found in System
===========================

========================= HW Revisions =========================

ASIC Revisions:
---------------

System PROM revisions:
----------------------
  CORE 1.0.14 2001/11/07 17:16   


Hasil ini membuat NgoprekUNIX senang sekaligus tambah bingung mengingat tidak ditemukannya kerusakan hardware. Pada sisi lain, ini menambah panjang jalur analisanya hehehe. Sepertinya harus kembali ke informasi awal pada error mesages di atas.

Utilisasi CPU dan memory (termasuk swap)
Penelusuran difokuskan pada tema besar utilisasi swap. Berbekal data daily monitoring yang NgoprekUNIX miliki dibandingkan kondisi hari ini ditemukan fakta mencengangkan bahwa terjadi penyusutan ukuran swap. (hah kok bisa ya???). Sebagai catatan, NgoprekUNIX mengembangkan skrip untuk memonitor lebih dari 130 server berbasis UNIX muliti platform baik AIX, Solaris, maupun UX. Hasilnya adalah log report berbentuk HTML yang selanjutnya dikonsolidasikan dalam bentuk EXCEL sebagai highlight nya. Dengan demikian, tampak mudah bukan karena kejadian abnormal baik over threshold pada utilisasi disk, memory atau CPU hingga error report. Jadi, triger analisa ini adalah tidak munculnya data server pada tabulasi excel. Biasanya fenomena ini disebabkan problem pada skrip atau problem serius pada server seperti kasus ini



Gambar di atas memberikan sinyal bahwa terjadi leak of memory usage. Sejatinya, swap hanya digunakan jika RAM (memory fisik) sudah habis digunakan oleh semua proses yang aktif. Dengan demikian, harus ditelusuri program atau proses apa yang berkontribusi besar dalam utilisasi memory tersebut. Berikut adalah hasil penerawangan dengan koman "prstat" :


Tampaknya penyebab kasus ini adalah proses Tivoli yang ternyata fungsi dan kegunaanny tidak lagi diperlukan. Oleh karena itu, NgoprekUNIX bersikukuh untuk segera mengakhiri semua proses tersebut. Perlu diketahui, kategori proses ini adalah daemon sehingga metode membunuhnya juga agak spesifik. Pasalnya, pada sejumlah kasus daemon akan kembali terbentuk jika metode "kill" yang digunakan. So, NgoprekUNIX akan mencari program atau skrip kunci sehingga proses pembunuhan sangat UNIXiawi (mirip manusiawi lah) hehe... Pada umumnya, daemon akan dijalankan dalam program RC yang dieksekusi saat server boot. Oleh karena itu, daemon akan otomatis aktif setelah server di restart meskipun sebelumnya daemon tersebut telah dibunuh.

Berikut adalah gambaran utilisasi memory dan swap sebelum eksekusi dilakukan :

# sar -r 1 10

SunOS tuxdevksi1 5.8 Generic_117350-52 sun4u    04/28/11

09:07:41 freemem freeswap
09:07:42    4386     9966
09:07:43    4386     9966
09:07:44    4386     9966
09:07:45    4386     9966
09:07:47    4386     9966
09:07:48    8689    19743
09:07:49    4386     9966
09:07:50    4386     9966
09:07:51    3361     7638
09:07:52    4386     9966

Average     4677    10628


Berikut adalah solusi yang telah terbukti ampuh mengatasi masalah swap shrink pada kasus ini :

# /etc/init.d/lcfd1.rc stop
# /etc/init.d/tecad_logfile stop all

Hasilnya adalah swap kembali normal sebagaimana mestinya :

# sar -r 1 5

SunOS tuxdevksi1 5.8 Generic_117350-52 sun4u    04/28/11

12:32:35 freemem freeswap
12:32:36  182436  6582431
12:32:37  182213  6576722
12:32:38  178709  6450246
12:32:39  181838  6561035
12:32:40  180921  6524894

Average   181213  6538719
/# df -k | grep swap
swap                 3317944      32 3317912     1%    /var/run
swap                 3318312     400 3317912     1%    /tmp


Lebih jauh, ternyata problem ini berdampak pada penguakan misteri gagalnya instalasi OpenSSh pada serevr ini. Padahal, OpenSSH yang sama telah berulangkali diinstall dengan metode yang sama pada server yang serupa baik tipe mesin maupun versi OS Solarisnya.

Demikian dulu ya corat-coret dari NgoprekUNIX, semoga bermanfaat.

Salam NgoprekUNIX,


0 komentar:

Posting Komentar