Lompat ke konten Lompat ke sidebar Lompat ke footer

Grafik API #2


 Ini bagus untuk merekam data grafik api dari proses yang sudah berjalan yang tidak ingin Anda ganggu. Bayangkan sebuah proses produksi dengan masalah yang sulit direproduksi. perf record -F99 -p `pgrep -n node` -g -- sleep 3 Tunggu, untuk apa tidur 3 itu? Itu ada di sana untuk menjaga perf tetap berjalan - meskipun opsi -p menunjuk ke pid yang berbeda, perintah perlu dijalankan pada suatu proses dan diakhiri dengan itu. perf berjalan selama masa pakai perintah yang Anda berikan padanya, apakah Anda benar-benar membuat profil perintah itu atau tidak. tidur 3 memastikan kinerja berjalan selama 3 detik. Mengapa -F (frekuensi profil) disetel ke 99? Ini default yang masuk akal. Anda dapat menyesuaikan jika Anda mau. -F99 memberitahu perf untuk mengambil 99 sampel per detik, untuk lebih presisi meningkatkan nilainya. Nilai yang lebih rendah akan menghasilkan keluaran yang lebih sedikit dengan hasil yang kurang tepat. Presisi yang Anda butuhkan bergantung pada berapa lama fungsi intensif CPU Anda benar-benar berjalan. Jika Anda mencari penyebab perlambatan yang terlihat, 99 bingkai per detik sudah lebih dari cukup. Setelah Anda mendapatkan catatan kinerja 3 detik itu, lanjutkan dengan membuat grafik api dengan dua langkah terakhir dari atas. Memfilter fungsi internal Node.js. Biasanya Anda hanya ingin melihat kinerja panggilan Anda sendiri, jadi memfilter fungsi internal Node.js dan V8 dapat membuat grafik lebih mudah dibaca. Anda dapat membersihkan file kinerja Anda dengan: 

 sed -i \ -e "/( __libc_start| LazyCompile | v8::internal::| Builtin:| Stub:| LoadIC:|\[unknown\]| LoadPolymorphicIC:)/d" \ -e 's/ LazyCompile:[*~]\?/ /' \ perfs.out

 Jika Anda membaca grafik api dan tampak aneh, seolah-olah ada sesuatu yang hilang dalam fungsi kunci yang menghabiskan sebagian besar waktu, coba buat grafik api Anda tanpa filter - mungkin Anda mendapat kasus masalah yang jarang terjadi dengan Node.js itu sendiri. 

    Opsi pembuatan profil Node.js. --perf-basic-prof-only-functions dan --perf-basic-prof adalah dua hal yang berguna untuk men-debug kode JavaScript Anda. Opsi lain digunakan untuk membuat profil Node.js itu sendiri, yang berada di luar cakupan panduan ini. --perf-basic-prof-only-functions menghasilkan lebih sedikit output, jadi ini adalah opsi dengan overhead paling sedikit. Mengapa saya membutuhkannya? Nah, tanpa opsi ini Anda masih akan mendapatkan grafik api, tetapi dengan sebagian besar batang berlabel v8 :: Function :: Call. masalah keluaran kinerja Perubahan pipeline Node.js 8.x V8 Node.js 8.x dan yang lebih baru dikirimkan dengan pengoptimalan baru untuk pipeline kompilasi JavaScript di mesin V8 yang terkadang membuat nama / referensi fungsi tidak dapat dijangkau untuk perf. (Ini disebut Turbofan) Hasilnya adalah Anda mungkin tidak mendapatkan nama fungsi Anda tepat di grafik api. Anda akan melihat ByteCodeHandler: tempat Anda mengharapkan nama fungsi. 0x memiliki beberapa mitigasi untuk bawaan itu. Untuk detailnya lihat: https://github.com/nodejs/benchmarking/issues/168 https://github.com/nodejs/diagnostics/issues/148#issuecomment-369348961 Node.js 10+ Node.js 10.x mengatasi masalah dengan Turbofan menggunakan tanda --interpreted-frames-native-stack. Jalankan node --interpreted-frames-native-stack --perf-basic-prof-only-functions 

untuk mendapatkan nama fungsi dalam grafik flame, terlepas dari pipeline mana yang digunakan V8 untuk mengompilasi JavaScript Anda. Label rusak pada grafik nyala api Jika Anda melihat label yang terlihat seperti ini node`_ZN2v88internal11interpreter17BytecodeGenerator15VisitStatementsEPNS0_8ZoneListIPNS0_9StatementEEE 

itu berarti kinerja Linux yang Anda gunakan tidak dikompilasi dengan dukungan demangle, lihat https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1396654 misalnya Contoh Berlatihlah menangkap grafik api sendiri dengan latihan grafik api!

Posting Komentar untuk "Grafik API #2"