Analisis pengujian dan penyetelan merupakan langkah penting dalam Performance Testing (PTS). Langkah ini memastikan kinerja yang diharapkan dari suatu sistem dapat dicapai. Topik ini menjelaskan proses dan metode analisis serta penyetelan pengujian kinerja untuk membantu pengembang, insinyur pengujian, dan insinyur O&M melakukan pengujian kinerja dengan cepat, mengidentifikasi hambatan, dan melakukan penyesuaian. Kinerja sistem dipengaruhi oleh berbagai faktor. Topik ini tidak mencakup semua faktor, tetapi memberikan panduan untuk menganalisis kinerja sistem.
Objek dan ruang lingkup yang berlaku
Topik ini berlaku untuk pekerjaan yang memerlukan analisis pengujian dan penyetelan. Pembaca yang dimaksud meliputi personel yang bertanggung jawab atas kualitas teknis suatu sistem, seperti administrator pengujian, operator pengujian, insinyur dukungan teknis, administrator kualitas proyek, dan administrator proyek.
Analisis Kinerja
Prasyarat
Untuk melakukan analisis kinerja, Anda harus melaksanakan tugas pemantauan pengujian kinerja, seperti pemantauan klien PTS, pemantauan dasar (Cloud Monitor), dan pemantauan Application Real-Time Monitoring Service (ARMS). Selain itu, Anda harus memiliki pengetahuan teknis yang relevan, termasuk sistem operasi, middleware, database, dan pengembangan.
Proses
Analisis kinerja adalah proses pengujian sistematis yang mengidentifikasi dan menyelesaikan hambatan kinerja suatu sistem. Gambar berikut menunjukkan proses analisis kinerja.
Dalam banyak kasus, lalu lintas uji stres tidak sepenuhnya diarahkan ke backend (sisi server). Pada lapisan akses jaringan yang menggunakan arsitektur berbasis cloud, seperti instance Server Load Balancer (SLB), instance Web Application Firewall (WAF), alamat IP Anti-DDoS, titik kehadiran Content Delivery Network (CDN) (POPs), atau titik kehadiran Edge Security Acceleration (ESA) POPs, kebijakan perlindungan mungkin terpicu karena batasan pada berbagai spesifikasi seperti bandwidth, koneksi maksimum, koneksi baru, atau karakteristik uji stres yang mirip dengan serangan Challenge Collapsar (CC) dan DDoS. Hal ini menyebabkan hasil pengujian yang tidak terduga. Untuk informasi lebih lanjut, lihat Mengapa kesalahan atau timeout terjadi bahkan di bawah beban backend yang kecil?
Anda harus memeriksa apakah metrik utama memenuhi persyaratan. Jika metrik utama tidak memenuhi persyaratan, Anda harus menemukan sumber masalah. Dalam banyak kasus, sisi server kemungkinan besar menjadi sumber masalah, dan sangat jarang sisi klien menjadi sumber masalah.
Untuk masalah yang terjadi di sisi server, Anda harus memeriksa metrik perangkat keras, seperti CPU, memori, disk I/O, dan jaringan I/O. Jika metrik perangkat keras abnormal, Anda harus melakukan analisis mendalam.
Jika metrik perangkat keras normal, Anda harus memeriksa metrik middleware, seperti thread pools, connection pools, dan operasi pengumpulan sampah (GC).
Jika metrik middleware normal, Anda harus memeriksa metrik database, seperti query SQL lambat, tingkat hit, kunci, dan pengaturan parameter.
Jika metrik sebelumnya normal, algoritma, buffer, cache, I/O sinkron, atau I/O asinkron aplikasi Anda mungkin abnormal. Dalam hal ini, Anda harus melakukan analisis mendalam.
Kemungkinan Hambatan
Mengidentifikasi kemungkinan hambatan suatu sistem adalah langkah kunci dalam analisis pengujian dan penyetelan. Hambatan kinerja seperti sumber daya yang tidak mencukupi atau metode yang tidak efisien membatasi kinerja keseluruhan sistem. Berikut ini daftar hambatan kinerja umum pada sistem.
Hambatan pada perangkat keras dan spesifikasi
Dalam banyak kasus, hambatan pada perangkat keras dan spesifikasi melibatkan masalah CPU, memori, dan disk I/O.
Hambatan kinerja pada middleware
Dalam banyak kasus, hambatan kinerja pada middleware melibatkan sistem database dan perangkat lunak aplikasi, seperti server aplikasi dan server web. Sebagai contoh, pengaturan parameter yang tidak tepat pada kumpulan koneksi Java Database Connectivity (JDBC) yang dikonfigurasi pada platform Weblogic dapat menyebabkan hambatan kinerja.
Hambatan kinerja pada aplikasi
Dalam banyak kasus, hambatan kinerja pada aplikasi melibatkan aplikasi yang dikembangkan oleh pengembang. Sebagai contoh, faktor-faktor berikut menyebabkan hambatan kinerja ketika sejumlah besar pengguna mengakses aplikasi sistem: parameter Java virtual machine (JVM) dan pengaturan kontainer yang tidak tepat, query SQL lambat yang dapat ditemukan menggunakan layanan pemantauan kinerja aplikasi Alibaba Cloud (APM), seperti ARMS, desain database dan perencanaan arsitektur program yang tidak masuk akal, dan desain program yang bermasalah, seperti pemrosesan serial, kurangnya buffering dan caching, jumlah thread pemrosesan permintaan yang tidak mencukupi, dan produsen dan konsumen yang tidak terkoordinasi.
Hambatan kinerja pada sistem operasi
Dalam banyak kasus, hambatan kinerja pada sistem operasi melibatkan sistem operasi Windows, UNIX, dan Linux. Sebagai contoh, ketika memori fisik tidak mencukupi selama pengujian kinerja, dan pengaturan memori virtual tidak tepat, efisiensi pertukaran memori virtual sangat berkurang, yang menyebabkan waktu respons meningkat secara signifikan. Dalam hal ini, dapat dianggap bahwa hambatan kinerja terjadi pada sistem operasi yang digunakan selama pengujian.
Hambatan kinerja pada perangkat jaringan
Dalam banyak kasus, hambatan kinerja pada perangkat jaringan melibatkan firewall, load balancer dinamis, dan switch. Layanan akses jaringan yang sering digunakan oleh arsitektur layanan berbasis cloud mencakup instance SLB, instance WAF, alamat IP Anti-DDoS, CDN POPs, dan ESA POPs. Sebagai contoh, mekanisme distribusi beban dinamis dikonfigurasi untuk load balancer dinamis. Jika sumber daya perangkat keras pada server aplikasi telah mencapai kapasitas maksimumnya, load balancer dinamis mengirimkan permintaan transaksi berikutnya ke server aplikasi lain yang memiliki beban lebih rendah. Selama pengujian, ditemukan bahwa load balancer dinamis tidak berfungsi sebagaimana mestinya. Dalam hal ini, dapat dianggap bahwa hambatan jaringan terjadi.
Metode Analisis
Analisis untuk kemungkinan hambatan bertujuan untuk mengidentifikasi hambatan kinerja dan menemukan batasan yang mempengaruhi kinerja suatu sistem. Isi berikut ini menjelaskan beberapa metode analisis umum untuk hambatan.
CPU
Jika pemanfaatan CPU sangat tinggi, Anda harus memeriksa status konsumsi CPU. Status konsumsi CPU bisa berupa User, Sys, atau Wait.
Jika nilai CPU User sangat tinggi, Anda harus menemukan proses yang mengonsumsi banyak sumber daya CPU. Saat menggunakan aplikasi Linux, Anda dapat menjalankan perintah
topuntuk melihat konsumsi CPU dan kemudian menjalankan perintahtop -H -p <pid>untuk mengidentifikasi thread yang intensif CPU. Saat menggunakan aplikasi Java, Anda dapat menggunakan alatjstackuntuk melihat stack yang dieksekusi oleh thread intensif CPU dan metode yang mengonsumsi sumber daya CPU. Anda dapat melihat kode sumber untuk mengidentifikasi alasan konsumsi sumber daya yang tinggi. Saat menggunakan aplikasi C++, Anda dapat menggunakan alat performagprofuntuk melakukan analisis.Jika nilai CPU Sys sangat tinggi, Anda dapat menggunakan alat
straceuntuk melihat konsumsi sumber daya yang dipanggil dan waktu sistem dalam aplikasi Linux.Jika nilai CPU Wait sangat tinggi, Anda dapat mengurangi jumlah log yang harus ditulis, menerapkan I/O asinkron, atau mengganti hard disk dengan performa IOPS yang lebih tinggi. Nilai CPU Wait yang sangat tinggi mungkin disebabkan oleh operasi baca/tulis disk frekuensi tinggi.
Memori
Dalam banyak kasus, sistem operasi menyediakan cache besar untuk memaksimalkan pemanfaatan memori. Oleh karena itu, normal jika pemanfaatan memori mencapai 99%. Untuk menemukan masalah memori, Anda harus memeriksa apakah suatu proses menempati jumlah memori yang sangat besar atau menghasilkan aktivitas swap yang tinggi.
Disk I/O
Salah satu metrik paling signifikan dari disk I/O adalah persentase kesibukan, yang dapat diturunkan dengan mengurangi jumlah log yang harus ditulis, menerapkan I/O asinkron, atau menggunakan hard disk dengan performa IOPS yang lebih tinggi.
Network I/O
Network I/O terutama bergantung pada ukuran konten yang ditransmisikan, yang tidak boleh melebihi 70% dari transmisi jaringan maksimum perangkat keras. Anda dapat mengurangi ukuran konten dengan menekan konten, mengonfigurasi cache pada komputasi Anda, atau mentransmisikan konten secara batch untuk meningkatkan performa Network I/O.
Parameter kernel
Dalam banyak kasus, parameter kernel mempertahankan nilai defaultnya. Nilai default tidak menyebabkan masalah untuk sebagian besar sistem. Namun, nilai parameter yang digunakan dalam uji stres mungkin melebihi nilai default dan menyebabkan masalah sistem. Anda dapat menggunakan alat
sysctluntuk melihat dan memodifikasi parameter kernel.JVM
JVM terutama menganalisis frekuensi GC atau FULL GC dan waktu pengumpulan sampah, yang dapat dilihat dengan menjalankan perintah
jstat. Untuk ukuran setiap heap dan untuk mengatasi GC yang sering, Anda dapat menggunakan alatjmapuntuk dump memori, dan kemudian menggunakan alatHeapAnalyzeruntuk mengidentifikasi pemanfaatan memori yang tinggi dan menentukan apakah terjadi kebocoran memori. Untuk kesederhanaan, Anda dapat menggunakan alat APM, seperti Alibaba Cloud ARMS.Thread pools
Jika thread yang ada tidak mencukupi, Anda dapat menyesuaikan parameter terkait untuk menambahkan thread. Jika pengaturan thread dari thread pools tinggi tetapi masih tidak mencukupi, Anda harus melakukan analisis mendalam. Faktor-faktor berikut dapat menyebabkan pengaturan thread tinggi menjadi tidak mencukupi: 1. Thread diblokir dan tidak dapat dilepaskan secara tepat waktu. Dalam hal ini, thread mungkin sedang menunggu kunci. 2. Metode yang digunakan membutuhkan waktu lama. 3. Basis data memiliki waktu tunggu yang lama.
JDBC connection pools
Jika connection pools yang ada tidak mencukupi, Anda dapat menyesuaikan parameter terkait untuk meningkatkan jumlah connection pools. Namun, jika kecepatan pemrosesan basis data lambat, penyesuaian tersebut tidak akan banyak berpengaruh. Anda harus melihat basis data dan mengidentifikasi alasan mengapa koneksi tidak dilepaskan dalam kode.
SQL
Efisiensi eksekusi SQL yang rendah juga merupakan alasan penting untuk buruknya performa. Anda dapat melihat rencana eksekusi saat ini untuk memeriksa mengapa eksekusi SQL lambat. Dalam banyak kasus, faktor-faktor berikut menyebabkan eksekusi SQL yang tidak efisien:
Kategori
Subkategori
Ekspresi atau deskripsi
Alasan
Indeks
Tidak ada indeks
N/A
Pemindaian tabel penuh dilakukan.
Indeks tidak digunakan
substring(card_no,1,4)='5378'Pemindaian tabel penuh dilakukan.
amount/30<1000Pemindaian tabel penuh dilakukan.
convert(char(10),date,112)='19991201'Pemindaian tabel penuh dilakukan.
where salary<>3000Pemindaian tabel penuh dilakukan.
name like '%Tom'Pemindaian tabel penuh dilakukan.
first_name + last_name ='beill cliton'Pemindaian tabel penuh dilakukan.
id_no in('0','1')Pemindaian tabel penuh dilakukan.
select id from t where num=@numPemindaian tabel penuh dilakukan meskipun parameter ada.
Indeks dengan performa rendah
Gunakan Indeks Nonclustered untuk melakukan operasi
oder by.Indeks memiliki performa rendah.
username='Tom' and age>20Indeks string memberikan efisiensi kueri lebih rendah daripada indeks integer.
Tabel berisi kolom dengan nilai NULL.
Indeks memiliki performa rendah.
Hindari penggunaan
IS NULLatauIS NOT NULL.Indeks memiliki performa rendah.
Jumlah data
Total jumlah data
select *Volume data besar dihasilkan di banyak kolom.
select id,nameTabel berisi jutaan baris, yang menghasilkan volume data besar.
Kueri bersarang
Analisis data asli terlebih dahulu dan kemudian filter data.
Volume data yang tidak berguna dihasilkan.
Kueri terkait
Lakukan kueri terkait untuk beberapa tabel. Dalam kueri, filter sebagian kecil data dalam tabel, dan kemudian filter sebagian besar data.
Sejumlah besar operasi terkait dilakukan.
Volume data besar dimasukkan.
Data dimasukkan sekaligus.
Sejumlah besar log dihasilkan, yang mengonsumsi banyak sumber daya.
Kunci
Menunggu kunci
update account set banlance=100 where id=10Kunci tingkat baris dihasilkan, yang menyebabkan seluruh tabel terkunci.
Deadlock
A:update a;update b;B:update b;update a;Deadlock dihasilkan.
Kursor
Cursor Open cursor,fetch;close cursorPerformanya rendah.
Tabel sementara
Jalankan pernyataan
create tmp tableuntuk membuat tabel sementara.Sejumlah besar log dihasilkan.
DROP TABLEJalankan pernyataan
DROP TABLEuntuk menghapus tabel sementara.Sistem harus menunjukkan bahwa penghapusan berhasil, yang mencegah penguncian jangka panjang.
Lainnya
EXISTSsebagai penggantiINselect num from a where num in(select num from b)INmenilai setiap kolom dalam tabel, sedangkanEXISTSmengakhiri kueri yang sedang berjalan begitu baris data dikembalikan.EXISTSsebagai penggantiselect count(*)EXISTSmenilai apakah sebuah rekaman ada.count(*)menghitung kumulatif jumlah kolom dalam tabel, sedangkanEXISTSmengakhiri kueri yang sedang berjalan begitu baris data dikembalikan.BETWEENsebagai penggantiINID in(1,2,3)INmenilai setiap kolom dalam tabel, sedangkanBETWEENmenilai apakah nilai bidang berada dalam rentang nilai tertentu.LEFT JOINsebagai penggantiNOT INselect ID from a where ID not in(select b.Mainid from b)NOT INmenilai setiap kolom dalam tabel. Oleh karena itu,NOT INmemberikan efisiensi kueri yang sangat rendah.UNION ALLsebagai penggantiUNIONselect ID from a unionselect id from b unionUNIONmenghapus baris duplikat dan mungkin mengurutkan hasil di disk, sedangkanUNION ALLmenggabungkan hasil bersama-sama.Pengikatan variabel ke pernyataan SQL umum
insert into A(ID) values(1)Kompilasi diperlukan setiap kali pernyataan SQL ditulis. Untuk kenyamanan Anda, Anda dapat mengikat variabel ke pernyataan SQL umum. Dengan cara ini, Anda hanya perlu mengompilasi pernyataan sekali dan dapat menggunakannya lagi nanti.
Penyetelan
Penyetelan kinerja adalah proses berkelanjutan yang memerlukan pemantauan dan penyesuaian tanpa henti dengan aplikasi yang berubah dan beban pengguna yang meningkat. Pengujian kinerja dan analisis rutin dapat membantu mengidentifikasi masalah pada kesempatan awal dan memastikan operasi sistem yang stabil di bawah setiap kondisi beban. Penyetelan mencakup banyak aspek, termasuk optimasi kode, optimasi database, konfigurasi server, dan optimasi jaringan.
Proses
Identifikasi masalah
Kode aplikasi: Dalam kondisi normal, masalah kinerja banyak program disebabkan oleh kode yang tidak tepat. Oleh karena itu, identifikasi modul yang memiliki hambatan dan periksa kode terlebih dahulu.
Pengaturan database: Pengaturan database yang tidak tepat dapat menyebabkan seluruh sistem berjalan lambat. Oleh karena itu, beberapa database besar memerlukan administrator database (DBA) untuk melakukan penyesuaian parameter yang tepat sebelum database dapat digunakan dalam produksi.
Pengaturan sistem operasi: Pengaturan sistem operasi yang tidak tepat dapat menyebabkan hambatan sistem.
Pengaturan perangkat keras: Disk I/O dan ukuran memori dapat dengan mudah menyebabkan hambatan.
Jaringan: Beban jaringan yang berlebih menyebabkan konflik jaringan dan latensi jaringan.
Analisis masalah
Setelah Anda mengidentifikasi suatu masalah, Anda harus menjelaskan apakah masalah tersebut memengaruhi waktu respons atau throughput atau menghasilkan konsekuensi lainnya.
Apakah sebagian besar pengguna atau hanya beberapa pengguna mengalami masalah? Apa perbedaan antara beberapa pengguna yang mengalami masalah dengan pengguna lainnya?
Apakah data pemantauan sumber daya sistem normal? Apakah pemanfaatan CPU telah mencapai batas? Bagaimana dengan I/O?
Apakah masalah-masalah tersebut terkonsentrasi pada jenis modul tertentu?
Apakah masalah-masalah tersebut ada di sisi klien atau di sisi server? Apakah pengaturan perangkat keras sistem mencukupi?
Apakah beban aktual melebihi kemampuan beban sistem? Apakah sistem perlu dioptimalkan?
Setelah Anda melakukan analisis sebelumnya dan menemukan masalah sistem lainnya, Anda dapat memiliki pemahaman yang lebih mendalam tentang hambatan sistem dan kemudian mengidentifikasi alasan sebenarnya.
Identifikasi tujuan penyesuaian dan solusi
Anda dapat meningkatkan throughput sistem dan mempersingkat waktu respons untuk memberikan dukungan yang lebih baik bagi pengembangan.
Uji solusi
Lakukan pengujian benchmark pada sistem tempat Anda menerapkan solusi penyetelan kinerja. Pengujian benchmark mengacu pada pengujian kuantitatif dan komparatif dari metrik kinerja jenis tertentu dari objek pengujian setelah menentukan metode pengujian ilmiah, alat pengujian, dan sistem pengujian.
Analisis hasil penyetelan
Analisis apakah penyetelan sistem mencapai atau melampaui tujuan yang diharapkan, apakah kinerja sistem secara keseluruhan dioptimalkan atau kinerja sebagian sistem dioptimalkan untuk menyelesaikan masalah lain, dan apakah pekerjaan penyetelan dapat diselesaikan. Terakhir, jika tujuan yang diharapkan tercapai, pekerjaan penyetelan berakhir.
Tindakan Pencegahan
Dalam desain dan pengembangan sistem aplikasi, Anda harus selalu mempertimbangkan kinerja, menormalisasi PTS, secara rutin melakukan pengujian kinerja intranet, dan secara berkala melakukan pengujian kinerja bisnis dalam lingkungan nyata.
Kuncinya adalah mengidentifikasi tujuan kinerja yang jelas. Setelah Anda mengidentifikasi tujuan tersebut, Anda dapat menerjemahkan tujuan tersebut ke dalam skenario uji stres di PTS, menentukan tingkat beban yang diperlukan, dan kemudian memilih konkurensi, mode transaksi per detik (TPS), dan kombinasi peningkatan otomatis serta regulasi manual untuk pembatasan lalu lintas sesuai kebutuhan.
Anda harus memastikan bahwa program yang disetel berjalan seperti yang diharapkan.
Kinerja sistem sangat bergantung pada desain yang efektif. Penyetelan hanyalah tindakan pendukung.
Proses penyetelan adalah proses iteratif dan bertahap. Hasil dari setiap penyetelan dimasukkan kembali ke dalam pengembangan kode berikutnya.
Penyetelan kinerja tidak boleh mengorbankan keterbacaan dan kemampuan pemeliharaan kode.
Analisis Pengujian Lainnya
Tingkat Keberhasilan
Tingkat keberhasilan ditentukan berdasarkan nilai yang dikembalikan oleh sisi server dan asersi yang dikonfigurasi. Jika tidak ada asersi yang dikonfigurasi, permintaan dianggap gagal karena kode kesalahan yang dikembalikan oleh layanan backend, pengecualian server, atau timeout.
Log
Log mencatat informasi setiap permintaan. Jika tingkat sampling adalah 10%, informasi tentang 10 permintaan dari setiap 100 permintaan dicatat. Jika tingkat sampling adalah 100%, setiap permintaan dicatat. Namun, pencatatan log meningkatkan beban pada generator beban dan mengakibatkan performa yang lebih rendah serta biaya yang lebih tinggi. Tingkat sampling log tidak memengaruhi sisi server.
Pembentukan Koneksi
Pembentukan koneksi mengacu pada proses untuk membentuk koneksi Protokol Transfer Hiperteks (HTTP). Jika periode timeout pembentukan koneksi yang ditentukan dilampaui oleh suatu permintaan, permintaan tersebut dianggap timeout. Periode timeout permintaan dimulai dari kueri Sistem Nama Domain (DNS) dan berakhir dengan penerimaan konten respons.