Firefoxがハングしました。一般的に-1、-9、または-15で終了しますが、今回はくそ、理由を知りたかったです。私はこれに約1時間を無駄にし、実際のトラブルシューティング以上の教育を求めます。
目的:Firefoxインスタンスを終了し、再起動せずに再実行します。
Firefoxはうまく動作しますが、過度のメモリ使用量のために遅くなります。約1000のブラウザウィンドウにAvogadroの複数のタブが開いています。 (一部誇張されている可能性があります。)ブラウザウィンドウがコンテンツの再描画を停止したときに一部のタブを閉じていました。関連のないウィンドウをドラッグすると、そのウィンドウの残りの部分が永遠に残る可能性があります。 WM_PAINTに対応するX11は何でも無視されます。電子メールのURLをクリックして新しいFirefoxを起動しようとすると、「Firefoxはすでに実行されていますが応答しません」というエラーメッセージのみが表示されます。
FirefoxのプロセスIDは9297です。
プロセス526はWindows管理者である。
=> ps axlクエリ9297 |
0 1000 9297 526 13 -7 6080428 4465776 poll_s S<sl ? 11602:12 firefox
0 1000 20000 9297 20 0 0 0 exit Z ? 216:31 [plugin-containe] <defunct>
(私は優先順位がFirefoxの停止に関連していることを確認するためにreniceと遊んでいました。いいえ。しかし、-7のままにしました。)
=> ps -efL |クエリ9297
darenw 9297 526 9297 57 61 Sep22 ? 6-23:10:34 firefox
darenw 9297 526 9300 0 61 Sep22 ? 00:00:00 firefox
darenw 9297 526 9301 0 61 Sep22 ? 00:00:00 firefox
... dozens like these ...
darenw 9297 526 7607 0 61 16:17 ? 00:00:00 firefox
darenw 9297 526 7657 0 61 16:17 ? 00:00:00 firefox
darenw 20000 9297 20000 1 1 Sep23 ? 03:34:36 [plugin-containe] <defunct>
=> ps axl grep 20000 |
0 1000 20000 9297 20 0 0 0 exit Z ? 216:31 [plugin-containe] <defunct>
メインスレッド9297がまだ終了コードを取得してスレッドを終了していないため、問題は解決しません。少なくともそれは「無効化」プロセスの私の理解です。この詳細を詳しく調べる方法、またはこれがFirefoxの停止の原因であるかどうかを確認する方法がわかりません。
=> strace -f -p 9297
...
[pid 13945] <... select resumed> ) = 0 (Timeout)
[pid 13945] select(0, NULL, NULL, NULL, {0, 10000}) = 0 (Timeout)
[pid 13945] select(0, NULL, NULL, NULL, {0, 10000} <unfinished ...>
[pid 9356] <... futex resumed> ) = -1 ETIMEDOUT (Connection timed out)
[pid 9356] futex(0x7f28b7df8be8, FUTEX_WAKE_PRIVATE, 1) = 0
[pid 9356] futex(0x7f28b7df8c14, FUTEX_WAIT_BITSET_PRIVATE, 1, {6910910, 806929252}, ffffffff <unfinished ...>
...
straceを実行するたびに同じ6本の行が繰り返されますが、時にはPIDに対して3本ではなく2本だけがあります。これら2つに加えて、他のPIDへの言及はありません。
=> ps axl grep 13945 |
4 0 4985 23253 20 0 11064 2236 pipe_w S+ pts/19 0:00 grep 13945
=> ps axl grep 9356 |
4 0 5111 23253 20 0 11064 2232 pipe_w S+ pts/19 0:00 grep 9356
それでは、2つのプロセス13945と9356は何ですか?
=> ps -eL | grep 9297 |grep 9356
9297 9356? 02:02:50 ソフトウェア VsyncTh 9297 13945? 01:04:15 Firefoxブラウザ
では、SoftwareVsyncThとは何ですか? Googleはあまり役に立ちませんでした。このシンボルは「ps」出力と他のプロセスとスレッドのリストに表示されますが、特定の方法でこれを参照するオンラインソースコードやQ&Aフォーラムには表示されません。私が知っている限り、これら2つのプロセスはFirefoxがフリーズしてウィンドウを描画できないこととは何の関係もありません。
より多くの手がかりを見つけるためにどのような追加のコマンドを使用できますか?ウィンドウ、タブ、およびそのURLのリストを取得し、シェルのコマンドラインで1つ(最も疑わしい/スパムURL)を閉じる方法はありますか?
まあ、何が起こったとしても、メインスレッドからいくつかの情報を得ることができることがわかりました。
=>トレース-p 9297
--- SIGVTALRM {si_signo=SIGVTALRM, si_code=SI_TKILL, si_pid=9297, si_uid=1000} ---
rt_sigreturn({mask=[]}) = -1 EINTR (Interrupted system call)
poll([{fd=23, events=POLLPRI|POLLOUT}], 1, 5000) = ? ERESTART_RESTARTBLOCK (Interrupted by signal)
繰り返し続けても何の変化もありません。
私はスレッド、プロセス、ミューテックス、ピューテックスなどに関する天才ではありませんが、おそらくこのミステリーを解決すれば天才になることができるでしょう!より詳細に調査し、Firefoxの停止に関連する可能性がある追跡結果で正確に何が起こっているのかを理解するには、より多くのコマンドを知る必要があります。
Firefoxを再起動させるコマンドがありますか?
システム仕様:クアッドコアIntelプロセッサ、16GB、Arch Linux最後のアップデートは約1〜2ヶ月前に行われました。 icewm、複数のワークスペース、さまざまなテキストエディタ、PDFビューア、ブラウザ、および開いているすべてを使用してください。画面の左上隅にRAMとスワップスペースの使用量を表示するには、conkyを実行します。私は通常交換の直前にいます。