- Mengukur waktu eksekusi di Linux memungkinkan Anda untuk mengoptimalkan skrip, membandingkan solusi, dan memantau skalabilitas program dan layanan.
- Alat-alat seperti time, dstat, iostat, iotop, ioping, dan atop membantu menghubungkan durasi proses dengan status CPU dan disk.
- Curl, bersama dengan perintah jaringan seperti ss, ping, dan traceroute, memungkinkan Anda untuk menganalisis waktu respons web dan dampak jaringan terhadap kinerja.
Mengukur berapa lama waktu yang dibutuhkan sebuah program untuk berjalan di Linux mungkin tampak seperti tugas sederhana, tetapi melakukannya dengan baik akan membuat perbedaan besar antara sistem yang sangat cepat dan sistem yang sangat lambat . Ketika Anda mulai mengotomatiskan tugas dengan skrip, mengembangkan aplikasi, atau mengelola server, waktu berhenti menjadi angka abstrak dan menjadi informasi kunci untuk membuat keputusan teknis.
Dalam pekerjaan sehari-hari, kita tidak hanya tertarik pada apakah sesuatu itu "cepat" atau "lambat." Kita membutuhkan metrik konkret: detik, milidetik, dan, jika nilainya sangat besar, dinyatakan dalam format HH:MM:SS untuk pemahaman yang lebih baik. Dari situ, kita dapat membandingkan solusi, mendeteksi hambatan, memantau tren kinerja, dan, secara umum, melacak bagaimana program dan layanan kita berperilaku.
Mengapa Anda tertarik mengukur waktu eksekusi di Linux?
Saat bekerja dengan Linux, baik di laptop pribadi maupun server produksi, mengetahui waktu eksekusi skrip dan program Anda adalah alat yang sangat berharga untuk meningkatkan kinerja . Ini bukan hanya soal rasa ingin tahu: hal ini berarti konsumsi sumber daya yang lebih sedikit, respons yang lebih cepat, dan pengalaman pengguna yang lebih lancar.
Salah satu alasan utama mengukur waktu adalah optimasi kinerja: jika Anda tidak tahu berapa lama suatu proses berlangsung, mustahil untuk mengetahui apakah Anda telah meningkatkan atau memperburuknya . Dengan mencatat durasi skrip pencadangan, pemrosesan data, atau penyebaran, Anda dapat mengidentifikasi bagian mana yang paling lambat dan memfokuskan upaya optimasi Anda di sana.
Hal ini juga penting untuk membandingkan solusi: dalam pemrograman, hampir selalu ada beberapa cara untuk menyelesaikan masalah yang sama . Anda dapat mengimplementasikan algoritma dalam Bash, Python, atau C, atau menguji berbagai kueri basis data; dengan mengukur waktu eksekusi setiap alternatif, Anda dapat memilih yang benar-benar paling efisien di lingkungan spesifik Anda.
Hal menarik lainnya adalah memantau kinerja dari waktu ke waktu: sebuah skrip yang berjalan cepat hari ini dapat menurun performanya setelah beberapa perubahan . Jika Anda mengukur durasinya secara teratur, Anda dapat mendeteksi kapan skrip tersebut mulai membutuhkan waktu lebih lama dari yang diharapkan dan menghubungkannya dengan modifikasi kode, perubahan pustaka, atau beban sistem.
Mengukur waktu eksekusi juga membantu menetapkan ekspektasi yang realistis—untuk diri Anda sendiri, tim Anda, dan pengguna Anda . Jika Anda tahu proses impor membutuhkan waktu sekitar 20 menit, Anda tidak akan menjanjikan bahwa proses tersebut akan selesai "dalam sekejap". Selain itu, informasi ini sangat berharga untuk merencanakan kapan harus meluncurkan tugas-tugas yang membutuhkan banyak sumber daya dan untuk menentukan ukuran sumber daya sistem dengan tepat.
Terakhir, pengukuran memungkinkan Anda untuk mengidentifikasi masalah skalabilitas: sebuah skrip yang berjalan dengan baik dengan sejumlah kecil data dapat menjadi sangat lambat seiring meningkatnya beban . Dengan mengukur durasinya dengan ukuran input yang berbeda atau pada mesin yang berbeda , akan lebih mudah untuk melihat apakah perlu paralelisasi, caching, peningkatan I/O, atau bahkan perancangan ulang secara menyeluruh.
Ukur waktu eksekusi menggunakan perintah time.
Di Linux, cara paling langsung untuk mengukur berapa lama waktu yang dibutuhkan suatu program atau skrip untuk dijalankan adalah dengan perintah `time`, sebuah alat sederhana namun ampuh untuk mendapatkan metrik eksekusi . Bagian terbaiknya adalah Anda tidak perlu memodifikasi program Anda: Anda cukup menjalankannya dengan diawali perintah ini.
Penggunaan paling dasar melibatkan penambahan kata `time` sebelum perintah yang ingin Anda ukur . Misalnya, jika Anda ingin mengetahui berapa lama waktu yang dibutuhkan untuk menampilkan daftar direktori yang sangat padat, Anda cukup mengetikkan perintah dengan `time` di terminal dan menunggu output dengan statistik tersebut.
Saat eksekusi selesai, waktu akan menampilkan tiga waktu utama yang penting untuk dipahami . Yang pertama adalah waktu "nyata", yang mewakili total waktu yang berlalu sejak perintah diluncurkan hingga selesai, seperti yang Anda rasakan sebagai pengguna.
Selain data waktu nyata, output tersebut mencakup nilai "user" dan "sys", yang memberikan informasi rinci tentang bagaimana CPU digunakan selama eksekusi program . "user" menunjukkan waktu yang dihabiskan prosesor untuk menjalankan kode program Anda dalam mode pengguna, dan "sys" mencerminkan waktu yang dihabiskan kernel untuk melakukan panggilan sistem atas nama proses tersebut.
Pemisahan ini sangat berguna karena memungkinkan Anda untuk membedakan apakah suatu program menghabiskan waktu untuk komputasi murni atau untuk operasi sistem seperti akses disk dan jaringan. Misalnya, suatu proses dengan banyak "sys" mungkin terbatas pada I/O atau banyak menggunakan panggilan sistem, sedangkan proses dengan banyak "user" biasanya lebih bergantung pada CPU.
Jika Anda ingin menyimpan hasil pengukuran, Anda dapat mengalihkan output standar dan kesalahan untuk menyimpan data perintah dan statistik waktu . Hal ini memungkinkan Anda untuk menganalisis bagaimana waktu berubah antara versi skrip yang berbeda atau di server yang berbeda di kemudian hari.
Mengukur waktu eksekusi skrip Bash dengan menggunakan waktu dan teknik lainnya.
Jika Anda tertarik dengan skrip Bash lengkap, pendekatannya tidak banyak berubah: Anda dapat menjalankan skrip dengan menambahkan perintah `time` di depannya, dan Anda akan mendapatkan metrik keseluruhan untuk eksekusinya . Ini sangat cocok untuk mendapatkan gambaran umum tentang berapa lama seluruh alur kerja berlangsung.
Selain menggunakan waktu secara eksternal, Anda juga dapat mengukur interval spesifik di dalam skrip itu sendiri menggunakan variabel tanggal dan operasi aritmatika . Misalnya, Anda dapat mencatat waktu mulai dan berakhir dalam detik dari epoch dan menguranginya untuk menentukan durasi blok kode tertentu.
Dalam banyak kasus, hasil pengurangan akan berupa sejumlah besar detik, dan membaca "7432" bukanlah hal yang intuitif, jadi sangat praktis untuk mengubah detik tersebut ke format yang lebih mudah dipahami manusia seperti HH:MM:SS . Hal ini sangat memudahkan interpretasi, terutama dalam log yang hanya ditinjau sesekali.
Untuk mengotomatiskan konversi ini, Anda dapat mendukung logika skrip dengan alat sistem yang memformat tanggal dan waktu , atau mengimplementasikan fungsi kecil yang membagi detik menjadi jam, menit, dan detik. Detail semacam ini sangat berpengaruh dalam memahami log eksekusi yang panjang.
Jika Anda menginginkan sesuatu yang lebih praktis, Anda dapat membuat skrip pembungkus atau skrip pembantu kecil yang menjalankan skrip lain, mengukur waktu, dan menampilkan output yang "bagus" dengan total waktu dalam berbagai format . Dengan cara ini, Anda dapat menggunakan kembali alat tersebut dalam pekerjaan otomatisasi apa pun yang Anda lakukan pada sistem Linux Anda.
Alat untuk mengukur aktivitas disk dan dampaknya terhadap kinerja.
Kecepatan suatu program tidak hanya bergantung pada CPU: kinerja disk sangat memengaruhi waktu eksekusi proses yang banyak melakukan operasi baca dan tulis . Linux menawarkan beberapa alat konsol untuk memantau apa yang terjadi dengan perangkat penyimpanan Anda.
Salah satu utilitas yang sangat serbaguna adalah dstat, yang memungkinkan Anda untuk mendapatkan statistik waktu nyata tentang aktivitas disk, di antara banyak metrik sistem lainnya . Jika Anda hanya ingin fokus pada operasi I/O disk, Anda dapat menggunakan parameter yang sesuai untuk memfilter informasi tersebut dan melihat bagaimana nilai-nilai tersebut berubah setiap detik.
Pada output dstat, Anda akan melihat kolom yang menampilkan pembacaan dan penulisan, yang membantu Anda mengidentifikasi lonjakan I/O yang mungkin memperlambat program Anda . Karena ini adalah alat interaktif, Anda dapat dengan mudah menghentikannya dengan kombinasi tombol yang sesuai ketika Anda memiliki cukup data untuk analisis Anda.
Alat klasik lainnya adalah iostat, yang dirancang untuk memantau beban pada perangkat input/output dan memeriksa berapa lama perangkat tersebut digunakan . Ini ideal untuk mengetahui apakah salah satu disk Anda terus-menerus digunakan hingga 100%, yang akan mengakibatkan waktu respons yang lebih lama untuk program apa pun yang mengaksesnya.
Pada sistem dengan banyak perangkat, seperti server dengan banyak perangkat loop, akan sangat berguna untuk memfilter output sehingga iostat hanya menampilkan disk fisik yang sebenarnya . Hal ini dicapai dengan menyesuaikan parameter, mengurangi noise pada output, dan memfokuskan perhatian pada hal yang benar-benar penting.
Pada distribusi seperti Ubuntu, iostat merupakan bagian dari paket sysstat, jadi Anda perlu menginstalnya sebelum menggunakannya . Setelah terinstal, Anda dapat mengaturnya untuk menghasilkan laporan secara berkala, yang sangat berguna untuk mengkorelasikan waktu eksekusi program dengan penggunaan disk.
Jika Anda ingin melihat proses mana yang paling banyak menggunakan disk pada waktu tertentu, Anda dapat menggunakan daftar "top" yang berfokus pada operasi input/output.
Selain itu, iotop memungkinkan Anda menyesuaikan interval penyegaran dengan opsi seperti -d, untuk menentukan seberapa sering informasi diperbarui . Perlu diingat bahwa untuk menggunakannya secara normal, Anda memerlukan hak akses superuser atau menjadi anggota grup administratif tertentu.
Perintah lain yang kurang dikenal tetapi sangat berguna adalah `ioping`, yang tidak terlalu berfokus pada volume I/O tetapi pada latensi disk . Dengan kata lain, perintah ini mengukur berapa lama waktu yang dibutuhkan penyimpanan untuk merespons permintaan, yang sangat penting untuk mendeteksi masalah perangkat keras atau konfigurasi yang meningkatkan penundaan dalam akses tertentu.
Untuk mendapatkan gambaran komprehensif tentang sistem Anda, Anda dapat menggunakan atop, alat canggih yang memperluas kemampuan perintah `top` klasik . Di antara banyak poin data lainnya, atop menampilkan informasi terkait kinerja disk, memungkinkan Anda untuk melihat apakah hambatan (bottleneck) untuk program Anda terletak pada penyimpanan, CPU, memori, atau jaringan.
Jika Anda tertarik untuk fokus hanya pada bagian disk, Anda dapat menggabungkan `atop` dengan pipe dan filter untuk mengisolasi hanya informasi yang terkait dengan subsistem I/O . Dengan cara ini, Anda akan memiliki pandangan spesifik tentang perilaku penyimpanan tanpa terganggu oleh metrik lainnya.
Ukur waktu respons web dari baris perintah.
Ketika Anda ingin mengukur "kecepatan" sebuah program yang bertindak sebagai layanan web, situasinya sedikit berubah: di sini, titik data kunci biasanya adalah waktu respons situs atau API . Linux juga menawarkan alat untuk ini, dan salah satu yang paling ampuh dan fleksibel adalah curl.
Perintah curl adalah perintah serbaguna sejati untuk mentransfer data menggunakan protokol seperti HTTP, HTTPS, FTP, atau FILE . Biasanya digunakan untuk mengunduh file atau memeriksa header HTTP, tetapi juga menyembunyikan fitur yang sangat menarik untuk mengukur berbagai waktu parsial dari sebuah permintaan.
Dengan opsi yang tepat, curl memungkinkan Anda untuk mencetak serangkaian variabel yang terkait dengan resolusi nama, koneksi, dan waktu transfer setelah operasi . Ini berarti Anda dapat mengirim permintaan ke URL dan mendapatkan, dalam hitungan detik, berapa lama setiap fase proses berlangsung.
Jika, misalnya, Anda ingin memeriksa perilaku situs HTTP, Anda dapat menjalankan curl dalam mode senyap, memberi tahu stempel waktu apa yang akan dicetak, dan membuang konten respons dengan mengarahkannya ke /dev/null . Ini hanya menyisakan metrik kinerja, yang merupakan hal terpenting dalam konteks ini.
Salah satu variabel yang dapat Anda tampilkan adalah `time_namelookup`, yang menunjukkan waktu yang dibutuhkan dari awal operasi hingga resolusi DNS nama tersebut selesai . Jika nilai ini tinggi, hambatan mungkin terletak pada resolusi nama, bukan pada server web itu sendiri.
Metrik relevan lainnya adalah time_connect, yang mengukur berapa lama waktu yang dibutuhkan untuk membangun koneksi TCP dengan server atau proxy . Peningkatan nilai ini dapat mengindikasikan masalah jaringan, kelebihan beban server, atau bahkan firewall yang menyebabkan latensi.
Variabel `time_pretransfer` mencerminkan waktu dari awal hingga saat tepat transfer data akan dimulai . Oleh karena itu, variabel ini mencakup resolusi nama, pembentukan koneksi, dan negosiasi pra-transmisi.
Penting juga untuk memperhatikan time_starttransfer, yang menunjukkan waktu dari awal operasi hingga byte pertama respons siap dikirim . Metrik ini biasanya dikaitkan dengan waktu yang dibutuhkan server untuk memproses permintaan dan menghasilkan respons awal.
Terakhir, ada time_total, yang menunjukkan total waktu yang dibutuhkan seluruh operasi, dari langkah pertama hingga transfer selesai . Data ini biasanya digunakan sebagai referensi umum untuk "waktu muat" atau "waktu respons" sebuah situs web.
Jika format yang ingin Anda cetak dengan curl sangat panjang atau kompleks, Anda dapat menyimpannya ke file teks dan meminta curl untuk membacanya dari sana menggunakan opsi yang sesuai . Ini akan mempermudah penggunaan kembali pola output yang sama untuk berbagai pengujian dan URL.
Dalam file tersebut, Anda dapat mengelompokkan semua variabel waktu yang Anda minati, menggunakan label yang mudah dibaca, sehingga setiap eksekusi curl mengembalikan laporan singkat tentang waktu untuk URL yang dianalisis . Hal ini memungkinkan Anda untuk dengan cepat membandingkan berbagai server, rute, atau konfigurasi aplikasi.
Mengukur waktu respons pada situs HTTPS dan aspek-aspek yang perlu dipertimbangkan.
Dalam kasus situs web yang disajikan melalui HTTPS, ada beberapa langkah tambahan dalam proses komunikasi yang juga perlu diukur. Curl menggabungkan variabel tambahan untuk memperhitungkan waktu yang dihabiskan untuk negosiasi SSL/TLS dan potensi pengalihan (redirect).
Salah satu variabel tersebut adalah `time_appconnect`, yang mengukur waktu yang dibutuhkan dari awal operasi hingga koneksi atau pertukaran SSL dengan server jarak jauh selesai . Jika Anda mendapatkan nilai yang tinggi di sini, masalahnya mungkin terletak pada konfigurasi TLS, sertifikat, atau lapisan enkripsi itu sendiri.
Metrik berguna lainnya adalah time_redirect, yang menggabungkan waktu yang dihabiskan pada semua langkah pengalihan sebelum transaksi akhir . Ini termasuk pencarian nama, koneksi, dan transfer perantara, membantu Anda memahami berapa banyak waktu yang hilang dalam 3XX hop sebelum mencapai konten akhir.
Sama seperti HTTP, variabel-variabel ini dapat disertakan dalam file yang diformat dan digunakan kembali dalam pengujian yang Anda jalankan terhadap berbagai situs HTTPS . Dengan cara ini, Anda akan selalu memiliki laporan yang konsisten yang memudahkan perbandingan hasil di berbagai server, domain, atau lingkungan pengujian.
Perlu dicatat bahwa, karena sifat enkripsi itu sendiri, situs HTTPS biasanya membutuhkan waktu sedikit lebih lama untuk merespons daripada situs yang sama yang menggunakan HTTP biasa . Jika perbedaannya signifikan, maka ada baiknya untuk meninjau parameter TLS, ukuran kunci, atau konfigurasi server.
Detail pentingnya adalah nilai yang dikembalikan oleh curl dapat sangat bervariasi dari satu eksekusi ke eksekusi lainnya, bahkan dalam kondisi yang tampaknya serupa . Faktor-faktor seperti beban server, kemacetan jaringan, atau waktu respons DNS secara langsung memengaruhi waktu tersebut.
Oleh karena itu, masuk akal untuk mengulangi pengujian beberapa kali, pada waktu yang berbeda dalam sehari, dan mendapatkan nilai rata-rata atau rentang nilai . Membuat keputusan optimasi berdasarkan satu pengukuran saja dapat menyebabkan kesimpulan yang menyesatkan.
Jika Anda ingin mempelajari kemampuan curl lebih dalam lagi, Anda selalu dapat melihat halaman manual (man page) menggunakan perintah yang sesuai untuk melihat semua opsi yang tersedia . Di sana Anda akan menemukan lebih banyak variabel waktu dan trik canggih untuk pengujian performa web.
Perintah jaringan yang berguna untuk memahami penundaan dan kehilangan data.
Kecepatan suatu program yang berkomunikasi melalui jaringan tidak hanya bergantung pada kode itu sendiri: kualitas koneksi dan kondisi jaringan secara langsung memengaruhi waktu eksekusinya . Linux menawarkan beberapa perintah yang dirancang untuk memeriksa aspek ini.
Sebagai permulaan, Anda memiliki ss, sebuah alat modern untuk menampilkan daftar koneksi jaringan aktif secara detail . Dengan menjalankannya menggunakan parameter yang sesuai, Anda dapat melihat koneksi TCP mana yang terbuka, proses mana yang menggunakannya, dan bagaimana statusnya.
Jika Anda tertarik untuk mengetahui layanan mana yang mendengarkan pada port tertentu, menunggu koneksi masuk , Anda juga dapat menggunakan `ss` dengan kombinasi opsi lainnya. Dengan cara ini, Anda akan mengidentifikasi layanan mana yang mungkin menerima lalu lintas dan memengaruhi kinerja server secara keseluruhan.
Untuk memeriksa kehilangan paket dan latensi dasar ke server lain, ping klasik tetap menjadi alat penting . Dengan membatasi jumlah paket yang dikirim dengan opsi yang sesuai, Anda dapat dengan cepat memperoleh waktu tempuh rata-rata dan persentase kehilangan paket.
Jika Anda mencurigai adanya masalah perutean, alat lain yang berguna adalah traceroute, yang menunjukkan kepada Anda hop jaringan mana yang dilalui paket Anda untuk mencapai tujuannya . Anda akan melihat daftar router perantara dan waktu responsnya, yang membantu Anda menentukan di mana penundaan terjadi.
Pada distribusi seperti CentOS atau Ubuntu, Anda mungkin perlu menginstal traceroute menggunakan pengelola paket yang sesuai sebelum dapat menggunakannya . Setelah terinstal, cukup masukkan alamat IP atau nama domain server tujuan untuk melihat jalur yang dilalui paket.
Dengan menggabungkan alat jaringan ini dengan pengukuran waktu program dan statistik disk, Anda dapat membangun gambaran yang cukup lengkap tentang di mana proses Anda menghabiskan waktunya . Hal ini sangat penting ketika Anda memiliki aplikasi atau layanan terdistribusi yang bergantung pada sumber daya eksternal.
Pada kenyataannya, baris perintah Linux berfungsi seperti pisau Swiss Army untuk mendiagnosis dan mengoptimalkan kinerja sistem Anda . Mulai dari waktu eksekusi skrip hingga latensi jaringan dan saturasi disk, semuanya dapat diukur dengan alat yang tepat.
Jika Anda menggunakan perintah-perintah ini secara sistematis, mendokumentasikan pengujian Anda, dan mencatat hasilnya, akan jauh lebih mudah untuk mendeteksi penurunan kinerja, menemukan hambatan, dan membuat keputusan yang tepat mengenai skalabilitas . Pada akhirnya, pengukuran yang akurat adalah langkah pertama menuju peningkatan yang nyata.
Penulis yang bersemangat tentang dunia byte dan teknologi secara umum. Saya suka berbagi ilmu melalui tulisan, dan itulah yang akan saya lakukan di blog ini, menunjukkan kepada Anda semua hal paling menarik tentang gadget, perangkat lunak, perangkat keras, tren teknologi, dan banyak lagi. Tujuan saya adalah membantu Anda menavigasi dunia digital dengan cara yang sederhana dan menghibur.