Saat membuat dukungan teknis untuk pelanggan, kami sering melihat banyak kelainan pelanggan. Setelah menghilangkan kelainan ini, kecepatan berjalan kode telah sangat ditingkatkan dibandingkan sebelumnya. Ini memungkinkan kita untuk menebak bahwa menggunakan kelainan dalam kode akan membawa overhead kinerja yang signifikan. Karena kelainan adalah bagian penting dari situasi yang salah, tidak mungkin untuk ditinggalkan, jadi kita perlu mengukur dampak pengobatan abnormal pada kinerja.
percobaan
Eksperimen saya didasarkan pada kode sederhana sederhana yang dilemparkan secara acak. Dari perspektif ilmiah, ini bukan pengukuran yang sepenuhnya akurat, dan pada saat yang sama, saya tidak tahu bagaimana melakukan kode operasi dalam kode yang sedang berjalan. Tetapi dalam hal apa pun, kode ini harus memungkinkan kita untuk memahami beberapa situasi dasar.
Hasilnya sangat menarik: biaya melempar dan menangkap kelainan tampaknya sangat rendah. Dalam contoh saya, sekitar 0,02 milidetik. Kecuali jika Anda benar -benar membuang terlalu banyak kelainan (maksud kami 100.000 atau lebih), ini pada dasarnya diabaikan. Meskipun hasil ini menunjukkan bahwa pemrosesan abnormal itu sendiri tidak mempengaruhi kinerja kode, itu belum menyelesaikan masalah berikut: Siapa yang bertanggung jawab atas dampak besar pada kinerja?
Saya jelas melewatkan masalah penting.
Setelah memikirkannya lagi, saya menyadari bahwa saya melewatkan bagian penting dari perawatan abnormal. Saya tidak mempertimbangkan apa yang Anda lakukan ketika kelainan terjadi. Dalam kebanyakan kasus, Anda kemungkinan tidak hanya untuk menangkap kelainan! Masalahnya ada di sini: Secara umum, Anda akan mencoba melengkapi masalah dan membiarkan aplikasi masih diputar dengan pengguna akhir. Jadi yang saya lewatkan adalah: "" "" Kode Tambahan "" untuk menangani kelainan. Bergantung pada kode yang berbeda, kehilangan kinerja mungkin menjadi sangat signifikan. Dalam beberapa kasus, ini mungkin berarti berfokus pada koneksi ke server, dan dalam kasus lain, itu mungkin berarti menggunakan solusi rollback default, dan solusi yang disediakan oleh solusi ini pasti akan membawa kinerja yang sangat buruk. Ini tampaknya memberikan penjelasan yang baik untuk perilaku yang kita lihat dalam banyak kasus.
Namun, saya tidak berpikir bahwa analisisnya adalah segalanya di sini, tetapi saya merasa ada hal lain yang terlewatkan di sini.
Tumpukan jejak
Saya masih ingin tahu tentang masalah ini, dan untuk alasan ini, saya memantau bagaimana kinerja berubah saat mengumpulkan jejak Strack.
Ini adalah kasus yang sering terjadi: untuk menuliskan lintasan abnormal dan tumpukannya, cobalah untuk mencari tahu di mana masalahnya.
Untuk alasan ini, saya memodifikasi kode dan mengumpulkan jejak Strack yang abnormal. Ini telah mengubah situasi secara signifikan. Efek kinerja pada pengumpulan jejak strack abnormal 10 kali lebih tinggi dari sekadar menangkap dan melempar kelainan. Oleh karena itu, meskipun Strack Trace membantu memahami di mana masalah terjadi (dapat membantu memahami mengapa masalah terjadi), ada kerugian kinerja. Karena kita tidak berbicara tentang jejak strack, dampaknya di sini seringkali sangat hebat. Dalam kebanyakan kasus, kita harus melempar dan menangkap kelainan di berbagai tingkatan. Mari kita lihat contoh sederhana: klien layanan web terhubung ke server. Pertama -tama, ada kelainan di tingkat perpustakaan Java. Sejak itu, akan ada klien yang tidak normal di tingkat kerangka kerja, dan mungkin ada panggilan logika bisnis yang abnormal di tingkat aplikasi di masa depan. Sampai sekarang, total tiga jejak strack harus dikumpulkan. Dalam kebanyakan kasus, Anda dapat melihat jejak strack ini dari file log atau output aplikasi, dan menulis jejak strack panjang ini sering juga juga memiliki efek kinerja.
sebagai kesimpulan
Pertama -tama, tidak baik untuk membuang kelainan abnormal karena dampak kinerja. Tidak biasa membantu memberikan cara yang konsisten untuk menyelesaikan masalah operasi dan membantu menulis kode bersih. Tetapi kita harus melacak kuantitas abnormal yang dilemparkan ke dalam kode, yang dapat menyebabkan efek kinerja yang signifikan. Oleh karena itu, OneAPM harus melacak kelainan yang dilemparkan secara default -dalam banyak kasus, orang akan terkejut dengan kelainan dalam kode dan kehilangan kinerja saat menyelesaikan kelainan ini. Kedua, meskipun sangat bermanfaat untuk digunakan, Anda juga harus menghindari menangkap terlalu banyak jejak strack. Kelainan harus dirancang untuk kondisi abnormal, dan prinsip ini harus diingat saat menggunakan. Tentu saja, jika Anda tidak ingin mengikuti kebiasaan pemrograman yang baik, bahasa Java akan memberi tahu Anda bahwa melakukannya dapat membuat program Anda berjalan lebih cepat dan mendorong Anda untuk melakukan itu.
Di atas adalah semua isi artikel ini.