Mengapa Firefox menyebabkan "lonjakan" penggunaan CPU tinggi setiap beberapa detik?

9

Ketika saya memulai Firefox, saya tidak punya masalah untuk sementara waktu, tetapi setelah beberapa hari, lonjakan CPU mulai terjadi. Selama lonjakan, Firefox macet lalu berhenti. Paku terjadi setiap tujuh hingga sepuluh detik, dan masing-masing paku berlangsung selama dua hingga tiga detik . Jika saya mengetik ketika lonjakan terjadi, karakter hanya akan keluar setelah lonjakan. Awalnya saya pikir masalah ini karena Flash, jadi saya nonaktifkan, tetapi masalahnya masih terjadi.

Selain itu, penggunaan memori Firefox meningkat hingga lebih dari 600 MB setelah beberapa hari.

Daftar plugin dan ekstensi Firefox yang saya gunakan tersedia di sini .

Boris_yo
sumber
6
Firefox selalu mengalami kebocoran memori, bagian itu normal.
John T
Gejala dilacak dalam bug 490122 . Sepertinya saya tidak mengalami ini di Firefox 4+ lagi - untungnya.
RomanSt
1
Dan setiap versi baru yang mereka janjikan telah diperbaiki! google.com.au/...
Matthew Lock
1
@ MatthewLock Bagaimana dengan ini ? Tampaknya hanya pengguna di Reddit yang merasa seperti ini yang disapa setiap versi ...
Daniel Beck

Jawaban:

8

Saya menduga itu adalah Pengumpul Sampah atau Pengumpul Siklus.

Di about:configubah javascript.options.mem.logmenjadi true. Sekarang pemberitahuan tentang GC dan CC harus tersedia di konsol Kesalahan ( Crtl+ Shift+ J) Jika waktu dan durasinya cocok dengan pembekuan, maka ini adalah masalah Anda.

Ketika saya memiliki masalah ini, saya memperbaikinya dengan menghilangkan profil Firefox saya dan membuat yang baru dari awal. Profil Firefox memiliki kecenderungan untuk mengumpulkan banyak crud dari waktu ke waktu.

Bahkan ini bukan solusi prefek. Jika Anda membuka banyak tab di Firefox (100+) atau banyak ekstensi dan membiarkan Firefox berjalan selama berhari-hari akhirnya pasti akan melambat. Anda harus memulai ulang Firefox sesekali.

Jika Anda seperti saya dan memiliki kecenderungan untuk mengumpulkan banyak tab yang Anda butuhkan untuk berurusan dengan beberapa titik trik lain yang saya gunakan adalah mengatur browser.sessionstore.max_concurrent_tabske 0. Ini akan menghentikan Firefox dari memuat semua tab sesi Anda saat memulai. Alih-alih itu akan memuat mereka ketika Anda beralih ke mereka. Saya menemukan ini, ditambah restart Firefox sesekali, sangat mengurangi beban memiliki banyak tab.

Tuan Alpha
sumber
2
Ada plugin Firefox yang disebut BarTab. Saya menganggap itu melakukan hal yang sama tentang browser.sessionstore.max_concurrent_tabs
Boris_yo
1
Ya, meskipun saya percaya ini tidak diperbarui untuk Firefox 4.
Mr Alpha
1
"max_concurrent_tabs" tampaknya tidak berada di Firefox 40 (2015-08).
Peter Mortensen
Saya pikir setara saat ini dari max_concurrent_tabs adalah pengaturan dalam preferensi di bawah "Umum" yang disebut "Jangan memuat tab sampai dipilih".
miyalys
9

Dalam about:config, atur browser.sessionstore.intervalke sejumlah besar (harus 10,000atau 15,000; atur sekitar 600,000).

Pada dasarnya, ini adalah jumlah milidetik antara waktu Firefox memperbarui "sesi tersimpan" Anda. Jika Anda memiliki banyak tab yang terbuka, atau riwayat perambanan yang panjang (atau, seperti yang sering terjadi pada saya, keduanya), ini dapat berupa penulisan data dalam jumlah yang konyol sessionstore.jssetiap 10 atau 15 detik, yang dapat menyebabkan video Flash bekukan sebentar atau bahkan buat seluruh komputer Anda beku setiap beberapa menit.

Menetapkan nilai ini ke sejumlah besar memiliki kelemahan bahwa jika Firefox macet, Anda kehilangan beberapa menit riwayat penelusuran saat mencoba memulihkan. Itu harga kecil yang harus dibayar menurut saya.

Paku CPU Anda harus menjadi jauh lebih jarang.

Mike
sumber
2
Saya telah menginstal plugin Session Manager. Ini juga menyimpan sesi yang memungkinkan manajemen dan penyesuaian yang lebih baik. Bagaimana jika Firefox dan plugin ini memperbarui sesi yang menyebabkan penggunaan CPU tinggi dan macet? Apakah ada cara untuk menonaktifkan fungsi pembaruan sesi Firefox dan mempertahankan Session Manager?
Boris_yo
1
Di Firefox 40, tampaknya menyimpannya di file "\ sessionstore-backups \ recovery.js" (catatan: di sub folder "sessionstore-backups") alih-alih "sessionstore.js" (dan versi sebelumnya di "\ sessionstore- backups \ recovery.js ").
Peter Mortensen
1
OK, ini tampaknya telah berubah dengan Firefox 33 (2014-06), bukan Firefox 40.
Peter Mortensen
4

Itu tidak akan memperbaiki kebocoran memori per se. Tetapi mengaktifkan "Jangan memuat tab sampai dipilih" setidaknya tidak akan memuat tab sampai Anda mengkliknya setelah dimulai ulang, yang membuat memori menurun.

Saya juga menemukan menggunakan CCleaner untuk membersihkan Firefox "Session" sedikit membantu. Cadangkan semua tab terbuka Anda terlebih dahulu karena menghapus informasi pemulihan sesi. Sebelum menjalankan CCleaner file sessionstore.js saya sekitar 800 KB, tetapi setelah itu turun menjadi sekitar 6 KB.

Informasi lebih lanjut tentang sessionstore dapat ditemukan di Soal: Firefox Membeku Setiap 10 Detik, Scrolling itu Gelisah .

Menghapus instalasi Flashblock memperbaiki masalah CPU saya yang tinggi dengan Firefox. Mungkin Flashblock dan Adblock Plus atau ekstensi lain tidak cocok?

Hidup terlalu singkat untuk dipusingkan dengan Firefox. Saya baru saja mengekspor bookmark saya, dan menghapus Firefox, kemudian menghapus semua folder Firefox di mesin, dan menginstal ulang Firefox dari awal, dan mengembalikan bookmark. Sekarang ini berjalan lebih cepat daripada Google Chrome dengan pemasangan yang sama sekali baru.

Matthew Lock
sumber
2

Sangat sulit untuk dikatakan. Apakah hanya penggunaan umum yang menyebabkannya, atau apakah Anda mengakses situs tertentu? (Kami memiliki masalah ketika browser mendapatkan memori dari waktu ke waktu karena kebocoran memori di jQuery ).

Dengan asumsi Anda menggunakan Microsoft OS, Anda dapat mencoba menggunakan alat Monitor Proses Microsoft . Ini memuntahkan banyak pesan, tetapi Anda harus dapat mempersempitnya ke interval di mana 'pembekuan' terjadi, dan mungkin melihat proses apa yang melakukan pemblokiran.

James Wiseman
sumber
jQuery dapat memiliki kebocoran memori? Hrmmmmm
Jeff F.
1
Itu bisa terjadi. Lihat daftar tiket bug jQuery ini: bugs.jquery.com/search?q=leak&go=&ticket=on . Kami temui karena kami terus-menerus mengenai satu halaman (melalui permintaan AJAX yang dipicu pada suatu interval) yang memicu kebocoran yang cukup besar.
James Wiseman
1
Kedengarannya lebih seperti masalah browser dan lebih sedikit masalah jQuary adalah apa yang saya katakan karena tidak dapat berjalan tetapi di browser (baik untuk sebagian besar kasus bagaimanapun) :) (if while (1 == 1) {} crash a browser Saya menyalahkan browser: P)
Jeff F.
1
Meskipun Anda benar dalam menyatakan bahwa browser salah (beberapa bug pada tautan di atas terkait dengan kegagalan IE untuk menangani referensi melingkar dengan benar), ada langkah-langkah yang dapat diambil oleh pengembang dalam kode JS mereka untuk memperbaiki masalah ini. Dalam C / C ++ Anda harus membersihkan memori yang telah Anda alokasikan secara manual karena tidak ada GC bagi Anda untuk melakukan ini. Jika tidak, apakah ini salah dalam kode Anda, atau runtime? Saya berpendapat bahwa tidak memperhitungkan keterbatasan lingkungan Anda dapat dianggap sebagai bug atas nama Anda, dan sepertinya itulah cara tim jQuery melihatnya juga.
James Wiseman
1
Nah ini berakhir dengan argumen konyol: P. JavaScript bukan kode, itu skrip; skrip berjalan dalam program lain. Program yang ditulis dengan buruk berjalan sendiri itu membutuhkan penulisan yang tepat karena ini. Program yang baik yang menerima skrip akan mencegahnya merusak dirinya sendiri. Karenanya mengapa jika Anda memeriksa bugzilla, Anda akan melihat apa yang dianggap sebagai bug terkait dengan JavaScript yang ditulis dengan buruk yang menyebabkan Firefox macet. Topik ini cukup banyak pendapat, jadi saya akan berhenti di situ saja! (Komentar pertama lebih berupa lelucon karena peramban tidak bocor jQuery)
Jeff F.
0

Jika Anda belum melakukannya, Anda dapat mencoba memutakhirkan ke Firefox terbaru. Mereka telah bekerja keras untuk mengurangi kebocoran memori itu.

CarlF
sumber
Saya selalu meningkatkan dan masalah tetap. Saya lebih suka hidup dengan Firefox 3.6.17
Boris_yo