応答しないブラウザ スクリプトにはどのように対処しますか?

応答しないブラウザ スクリプトにはどのように対処しますか?

コンピュータがフリーズしたとき、通常はターミナルに入り、top を実行してメモリを消費している原因を調べ、そのプロセスを強制終了することで、非常に簡単に問題を解決できます。ひどくフリーズしたときは、ターミナルに入るのにCTRL+ ALT+を押さなければならないため、難しい場合がありますF1。また、xkill を実行するためのキーボード ショートカットを設定しておくと、フリーズの原因となっている GUI アプリを強制終了できるので便利です。

何年もこの問題を抱えているのに、対処方法がわからないのは、応答しないブラウザ スクリプトです。時々、コンピュータがひどくフリーズしてマウス ポインターを動かせなくなることがありますが、やがてフリーズが解除され、ブラウザの 1 つ (以前は常に Firefox でしたが、最近は Chrome) で、JavaScript スクリプトが応答していないというポップアップが表示されます。強制終了するオプションが表示されますが、強制終了ボタンを押しても問題は解決しないようです。

この問題にはどのように対処しますか? また、メモリのオーバーロードの問題全般にはどのように対処しますか? 以前は、CTRL+ ALT+を押してTtop を実行し、どのプログラムが最も多くのメモリを使用しているかを確認してそれを強制終了していましたが、これは手順が多く、コンピュータがフリーズしている場合は 1 つの手順に長い時間がかかることがあります。そのため、1 つの手順で実行できるようにキルスイッチを設定するか、マシンをフリーズさせそうなプログラムをすべて強制終了するデーモンを設定するなど、より良い方法を検討しています。

また、どのプログラムが問題を引き起こしているかを調べる最も良い方法は何ですか? top では、CPU を過剰に消費しているプログラムが表示されないこともあるため、常に簡単に確認できるわけではありませんが、下にスクロールすると、このプログラムのインスタンスが約 50 個実行されていることがわかります。したがって、プログラムの合計 CPU 使用量を確認できれば、はるかに便利です。Firefox と Chrome が 2 つの主な原因で、sublime-text-3 が時々原因になることがあります (これは、開いているタブが多すぎることが原因でしょうか)。

そこで私は次のコマンドを見つけました:

ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head

現時点では次のリストが表示されます:

  PID  PPID CMD                         %MEM %CPU
 6896   968 /opt/google/chrome/chrome - 13.1  2.7
27334  4769 /usr/lib/firefox/firefox     6.6 13.0
 5607  4769 /usr/bin/compiz              4.7 44.7
26381 26363 /usr/lib/libreoffice/progra  2.7  0.0
  953  4769 /opt/google/chrome/chrome h  2.0  3.0
 2777  2457 /usr/lib/xorg/Xorg -core :0  1.8 29.5
 6980  4769 /usr/lib/x86_64-linux-gnu/z  1.6  0.0
 8180  8167 mono /usr/lib/AirVPN/AirVPN  1.6  2.1
 1096   968 /opt/google/chrome/chrome -  1.4  0.1

今のところコンピューターはフリーズしていないので問題ありませんが、Firefox 自体を使用しようとするとフリーズしてしまいます。タブをたくさん開いたままにしておくことが多いのですが、top を実行すると Chrome と Firefox のインスタンスが多数表示されるのはそのためでしょうか?

htop は top よりも多くのオプションを提供しているので、おそらく問題を診断するのに適したツールです。このことについていくつか理解できないことがあります。まず、コンピューターが定期的にフリーズする場合、%CPU と %MEM のどちらがより重要なのかということです。htop ではどちらかで並べ替えることができます。メモリ使用量で並べ替えると、次のようになります。ここに画像の説明を入力してください

CPU 使用率で並べ替えると次のようになります。ここに画像の説明を入力してください

PS を実行してわかったように、Firefox と Chrome がメモリの大部分を占め、Compiz が CPU の大部分を占めています。システムのフリーズを解除する際に考慮すべき他の重要な要素はありますか? たとえば、プロセスの実行時間の長さは影響しますか? Compiz は他のどのプロセスよりも長く実行されているようです。ここに画像の説明を入力してください

キルスイッチについては、他の誰かが書いたものを見つけました:

while [ 1 ]; do 
    echo
    echo checking for run-away process ...

    CPU_USAGE=$(uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g")
    CPU_USAGE_THRESHOLD=300
    PROCESS=$(ps aux r)
    TOPPROCESS=$(ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | grep -v PID | head -n 1)

    if [ $CPU_USAGE -gt $CPU_USAGE_THRESHOLD ]; then
        kill -9 $(ps -eo pid --sort=-%mem | grep -v PID | head -n 1)

        echo "High memory usage process killed $TOPPROCESS\n"
        echo "Load average was at $CPU_USAGE\n"
    else
        echo 'CPU Load Back to Normal'
        exit 0
    fi
done

しかし、それがどのように機能するか、何をするかについては100%確信がありません。実行すると:

uptime | cut -d"," -f4 | cut -d":" -f2 | cut -d" " -f2 | sed -e "s/\.//g"

149、179、178 のような数字が返されます。アップタイムのマニュアルを読みましたが、システムのフリーズを防ぐためにそれがどのように役立つのか理解できません。

これらは、htop によって表示されるメモリを使用している上位のアプリのいずれにも表示されるプロセス ID ではありません。

uptime を単独で実行すると、次のようになります:

17:49:53 up 1 day, 11:09,  2 users,  load average: 3.16, 2.45, 2.03

私のシステムは 17.49 時間稼働しています。私のコンピュータの負荷平均が何を意味するのかはわかりません。このコンピュータは最近、兄がオフィスに未使用のコンピュータを持っていたので譲り受けたものですが、仕様を確認すると次のようになっています。

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 26
Model name:            Intel(R) Core(TM) i7 CPU         940  @ 2.93GHz
Stepping:              4
CPU MHz:               1867.000
CPU max MHz:           2934.0000
CPU min MHz:           1600.0000
BogoMIPS:              5852.21
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7

かなり驚きました。これはすごいですね。CPU が 8 個。そして RAM も:

free -lm
              total        used        free      shared  buff/cache   available
Mem:          12005        7154         311         531        4539        3996
Low:          12005       11694         311
High:             0           0           0
Swap:         30516        1002       29513

12 GB なんて、知りませんでした。私の古いラップトップは 2 GB でした。だから、なぜ今このようにフリーズするのかは謎です。

そこで私が疑問に思っているのは、

1.) システムの速度低下やフリーズの原因を突き止める最善の方法は何ですか?

2.) 実際のブラウザを強制終了せずに、この特定の応答しないスクリプトの状況に対処するにはどうすればよいでしょうか? NoScript などのプラグインを使用していますが、多くの場合、JavaScript を有効にする必要があります。また、特定のプラグインもスクリプトを使用します。それらを強制終了しても何も解決しないのはなぜでしょうか。実際にはそのように強制終了できないからでしょうか? ブラウザを検索して、応答しないスクリプトを含むページを実行しているタブを見つけ、タブを閉じて再起動するスクリプトを作成する方法はありますか? または、スクリプト自体を強制終了して、コンピューターが再び正常に動作するようにする方法はありますか? 応答しないスクリプトによってシステム全体がフリーズする理由がわかりません。クラッシュしたスクリプトを実行しようとすると、ブラウザが過剰なメモリを消費するのではないかと思います。

2.) システムをフリーズ解除する最善の方法は何ですか。特に、マウス ポインターを移動できない最悪のシナリオの場合に、キルスイッチに接続されたショートキー コンボを使用するのがよいでしょうか。

3.) キルスイッチを作成するには、どのようにすればよいでしょうか。スクリプトは何をすべきでしょうか。メモリや CPU を最も多く使用しているプログラムを見つけて、それを強制終了する必要がありますか。メモリや CPU を最も多く使用しているアプリは、Firefox で作業している場合など、開いたままにしておく必要がある場合もあるため、より洗練されたアプローチを採用したいと思います。Firefox で作業している場合、強制終了すると書き込み中のデータが失われる可能性があるためです。重要度の低いアプリのリストをスクリプトに提供して、そのリストを実行し、強制終了する価値があるほどメモリを消費しているかどうかを評価できます。

4.) SWAP パーティションのサイズを増やすと役立ちますか?

答え1

ボトルネックは、タスクマネージャーで最大限に使用されているように見えるものですhtop。この場合、Chromeタブで溢れているRAMのようです。幸いなことに、Chromeには独自のタスクマネージャーが付属していますこれにより、どのタブが RAM を大量に消費しているかを確認して終了できます。

Google Chrome タスク マネージャー

Chrome拡張機能グレートサスペンダーそして怠け者のタブRAM の節約にも役立ちます。

Chrome が原因ではなく、応答性の高いシステムを迅速に必要とする場合は、以下を参照してください。急いでください! Ubuntu の RAM がすぐに不足し、コンピューターが完全にフリーズしそうです! どのコマンドを使えば救われるでしょうか?

関連情報