Category Archives: Tips Linux

Menghitung Memori Yang Sekarang Sedang Digunakan oleh Aplikasi

Menghitung memori yang terpakai oleh sebuah program yang sedang berjalan di Linux itu agak ribet. Anda bisa melihat/menghitungnya dari output perintah ps, atau pmap. Tapi apa yang Anda lihat bukanlah apa yang terpakai. Harus dihitung dulu.

Dan disini saya tidak sedang ingin membicarakan hal yang rumit. Yang rumit silakan di googling saja. Ada yang sudah berbaik hati, membuatkan python script yang bisa digunakan untuk menghitung alokasi memori per proses/aplikasi/program.

Ambil ps_mem.py, skrip yang sudah lama ada, tapi entah memang google yang menyembunyikannya, atau saya yang tidak mencari sehingga baru tahu hari ini :P

sudo ./ps_mem.py

Berikut contoh hasil keluaran python script di atas, di jalankan di hostingan Linode VPS saya.

Private  +   Shared  =  RAM used       Program 

  4.0 KiB +  35.5 KiB =  39.5 KiB       getty
 28.0 KiB +  29.5 KiB =  57.5 KiB       atd
  4.0 KiB +  73.5 KiB =  77.5 KiB       upstart-udev-bridge
  0.0 KiB +  84.5 KiB =  84.5 KiB       udevd (3)
 96.0 KiB +  24.0 KiB = 120.0 KiB       dhclient3
 84.0 KiB +  58.5 KiB = 142.5 KiB       cron
116.0 KiB + 187.5 KiB = 303.5 KiB       master
264.0 KiB +  87.0 KiB = 351.0 KiB       ntpd
208.0 KiB + 201.5 KiB = 409.5 KiB       qmgr
256.0 KiB + 208.0 KiB = 464.0 KiB       tlsmgr
404.0 KiB +  84.5 KiB = 488.5 KiB       rsyslogd
348.0 KiB + 189.5 KiB = 537.5 KiB       pickup
480.0 KiB + 112.5 KiB = 592.5 KiB       init
  1.2 MiB +  55.5 KiB =   1.2 MiB       bash
764.0 KiB +   1.2 MiB =   1.9 MiB       sshd (3)
  2.1 MiB + 404.0 KiB =   2.5 MiB       python2.6
  2.6 MiB + 848.5 KiB =   3.4 MiB       nginx (5)
  4.2 MiB +   2.6 MiB =   6.8 MiB       apache2 (5)
 11.1 MiB + 117.5 KiB =  11.2 MiB       mysqld
 57.0 MiB + 562.0 KiB =  57.5 MiB       php5
---------------------------------
                         88.1 MiB
=================================

Tuh kan… yang boros itu php nya, bukan apachenya. Sebelum ada yang bertanya, saya pasang Nginx di depan Apache + suExec/FastCGI + php5.

Btw, di tempat mengunduh skript tadi banyak loh skrip lain yang menarik. Silakan dilihat-lihat.

Keyboard Shortcut untuk BASH

Pernah merasakan menderitanya pergi ke awal baris hanya untuk memperbaiki salah ketik di Terminal? Apalagi kalau koneksi yang digunakan tipikal GPRS yang gak stabil, bisa makin bete saja.

Biasanya kalau sudah begini, cara bodohnya saya cancel perintah tersebut, kemudian saya buka aplikasi note (notepad misalnya kalau di Windows, atau apapun yang bisa dipake untuk nulis), lalu mengetikkan semua perintah disana (pasti lebih cepet kan). Salin perintah tersebut dan tempelkan (paste) ke Terminal yang sedang terkoneksi ke remote server.

Cara lain yang saya gunakan (setelah hilang malesnya), adalah menghafal  beberapa keyboard shorcut yang bisa digunakan untuk BASH. Tidak perlu semuanya dihafal, pilih beberapa saja. Misal, favorit saya cuma 3 shortcut.

  1. CTRL + a – Untuk pergi ke awal baris
  2. CTRL + e – Untuk pergi ke akhir baris
  3. CTRL + k – Untuk menghapus semua karakter di kanan kursor

Dengan tiga shortcut itu saja, saya bisa lebih efesien bekerja di Terminal. Mau yang lebih lengkap, silakan dilihat di sini.

Mencari tahu besar email yang bisa diterima oleh server tujuan

Mungkin suatu ketika Anda ingin mengirim email ke seorang teman dengan alamat email tertentu. Dan dalam email itu Anda ingin menyertakan beberapa berkas dokumen yang lumayan besar.

Sekarang permasalahannya apakah server tujuan bisa menerima email Anda atau tidak. Karena email server biasanya membatasi besar email yang bisa diterima. Bisa saja Anda kirim dulu dengan perkiraan kalau kelebihan, nanti ada pesan bounce/error dari server tujuan. Tapi masa kirim email kok pakai coba-coba (halah kemakan iklan nih, hahaha).

Dari pada coba-coba mending kita tanya ke servernya langsung. Misal, kita ingin tahu berapa besar email yang bisa diterima oleh domain cbn.net.id.

Pertama cari tahu dulu, server mana yang harus kita cek. Mau kirim email kan? Cek MX record untuk domain tersebut.

dig mx cbn.net.id

[dipotong...]
;; ANSWER SECTION:
cbn.net.id.             8185    IN      MX      20 mx.cbn.net.id.
[dipotong...]

Dapet, server yang harus di cek adalah mx.cbn.net.id, sekarang mari kita tanya ke servernya.

telnet mx.cbn.net.id 25

Trying 125.208.145.26...
Connected to mx.cbn.net.id.
Escape character is '^]'.
220 mx.cbn.net.id ESMTP
helo cecep.ngadimin.org
250 mx.cbn.net.id
ehlo cecep.ngadimin.org
250-mx.cbn.net.id
250-8BITMIME
250-SIZE 10485760

Servernya jawab, kalau email yang bisa dia terima itu besarnya 10485760 byte (~10MB).

Dengan cara yang sama kita bisa tahu kalau gmail bisa menerima email s.d ~35MB, Hotmail 29MB, ngadimin.org ~35MB (dihosting di google jg, pake google apps).

Catatan: tidak semua server bisa dicek seperti itu. Seperti yahoo misalnya, begitu di telnet langsung di close (kayaknya dia pakai proteksi semacam greylisting). Dan tidak semua smtp server memberikan informasi SIZE yang kita tanya tadi.

Django DebugFooter Middleware

Saya ingin memasang DebugFooter di django. Dan ternyata malah muncul error:

[Wed Nov 25 20:28:01 2009] [error] [client 127.0.0.1]     response = middleware_method(request)
[Wed Nov 25 20:28:01 2009] [error] [client 127.0.0.1]   File "/sites/blog/../blog/debug_middleware.py", line 100, in process_r
equest
[Wed Nov 25 20:28:01 2009] [error] [client 127.0.0.1]     dispatcher.connect(
[Wed Nov 25 20:28:01 2009] [error] [client 127.0.0.1] AttributeError: 'module' object has no attribute 'connect'

Setelah googling, dan menemukan artikel backwards-incompatible changes dari versi 0.96 ke 1.0, dibagian Signal refactoring dijelaskan ada perubahan kode.

Singkat cerita, saya akhirnya bisa memasang DjangoFooter middleware. Saya pakai versi yang sedikit diubah, lalu saya sempurnakan lagi agar berfungsi dengan baik di django 1.0 ke atas.

Kodenya bisa Anda lihat di djangosnippets 1816.

Cara Pakai

Misal, project yang Anda buat di django adalah blog, dan path nya di /sites/blog. Simpan kode tadi ke /sites/blog/debug_middleware.py.

Lalu tambahkan di /sites/blog/settings.py

MIDDLEWARE_CLASSES = (
    ...
    'blog.debug_middleware.DebugFooter',
)

Sedikit Catatan Seputar Squid NTLM auth di Ubuntu

Jika Anda mengkonfigurasi autentikasi di squid menggunakan ntlm_auth, seperti contoh di bawah ini.

auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param ntlm use_ntlm_negotiate off

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

Di ubuntu, jika Anda cari ada dua ntlm_auth, pertama yang dibawa oleh paket squid. Dan yang kedua yang dibawa dari paket winbind. Dan untuk konfigurasi di atas, yang digunakan adalah ntlm_auth dari paket winbind.

Dan path yang tepat untuk konfigurasi nya seperti tertulis di atas, ke /usr/bin/ntlm_auth, dan BUKAN ke /usr/lib/squid/ntlm_auth.

Kasus starting LDAP lama banget saat booting

Ini adalah kasus di server temen saya. Saat booting sistem berhenti ketika menjalankan service ldap. OS menggunakan CentOS 4.7.

Setelah saya cek, /etc/nsswitch.conf di set seperti ini

passwd:     files ldap
shadow:     files ldap
group:      files ldap

Yang berarti untuk user dan group, sistem akan melakukan lookup ke data di ldap.

Dan di sini lah letak masalahnya, saat booting sistem sudah melakukan lookup data user dari ldap, sedangkan ldapnya sendiri belum jalan.

Ternyata, solusinya mudah. Di nss_ldap, kita bisa paksa agar user-user tertentu tidak di lookup ke ldap. Caranya kalau di CentOS, sunting berkas /etc/ldap.conf, masukkan baris seperti ini [1].

nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon

Yup, yang saya ignore adalah user root, ldap, named, avahi dan haldaemon. Setelah konfigurasi itu diterapkan, sekarang starting ldap menjadi normal kembali.

Case closed!

[1] Informasi saya dapatkan dari bugzilla redhat.