編集1:ちょうど停止現象が発生し、修復できました。停止状態から現在までのログ(syslog):https://ufile.io/ivred
編集2:これはGDM3のバグ/問題のようです。私はXubuntuを試してみます。
編集3:今Xubuntuを使用しています。問題はまだ発生しますが、頻度ははるかに低いです。だから..本当にメモリの問題です。
HDが終了して以来、現在Ubuntu 18.10 Live CDを使用しています。 RAMは4GBしかないので、主にメモリ消費のためにLiveCDをいくつかカスタマイズしました。
利用可能なメモリが100 MB未満に低下すると、ペンドライブのLEDが狂ったように点滅し始め、システムがフリーズしてGUIインターフェイスを終了し(Ctrl++...)、再起動(++)するか、時々Google Chromeと。Altf1f12CtrlAltDelsudo killall chrome
そのため、システムキャッシュをクリーンアップしてGoogle Chromeを閉じる非常に簡単なスクリプトを作成しました。タブが正しく閉じられていない場合は、タブを復元するように求められます。
質問:95%の場合、それは魅力のように動作します。私のスクリプトが単純すぎるか、再起動が必要なためログを確認できないため、断続的にハングする他の原因があるかどうかわかりません。これを行うより効率的な方法はありますか?私は何が間違っていましたか?
観察:15分ごとに実行されるキャッシュをクリーンアップする別のスクリプトがあります。このスクリプトを作成したので、ほとんど問題なくLiveCDを毎日使用できます。 1日1回程度かもしれません。以前は複数のタブを持つChromeを使用していたため、30〜40分ごとに再起動する必要がありました。
私のスクリプト:
#!/bin/bash
while true ; do
free=`free -m | grep Mem | awk '{print $4}'`
if [ "$free" -gt 0 ]
then
if [ $free -le 120 ]; #When my memory consuptiom goes below 120MB do the commands below.
then
if pgrep -x "chrome" > /dev/null
then
sudo killall -9 chrome
sudo su xubuntu
/usr/bin/google-chrome-stable --password-store=basic --aggressive-cache-discard --aggressive-tab-discard
else
echo "Stopped"
fi
sudo sysctl -w vm.drop_caches=3
sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
fi
fi & sleep 1; done
答え1
コメントに「fra-san」が提供したソリューションが完璧にフィットします。 「cgroup-tools」パッケージを使用してChromeのメモリ使用量を正常に制限できました。何十ものタブを同時に開いてテストしましたが、メモリ制限が実際に機能していることがわかります。ただし、Chromeを主に使用してもシステムキャッシュもRAMを消費するため、スクリプトを実行し続ける必要があります。
私のステップ:
1- 次のスクリプトを使用します。単一のLinuxプロセスのメモリ使用量の制限
#!/bin/sh
# This script uses commands from the cgroup-tools package. The cgroup-tools commands access the cgroup filesystem directly which is against the (new-ish) kernel's requirement that cgroups are managed by a single entity (which usually will be systemd). Additionally there is a v2 cgroup api in development which will probably replace the existing api at some point. So expect this script to break in the future. The correct way forward would be to use systemd's apis to create the cgroups, but afaik systemd currently (feb 2018) only exposes dbus apis for which there are no command line tools yet, and I didn't feel like writing those.
# strict mode: error if commands fail or if unset variables are used
set -eu
if [ "$#" -lt 2 ]
then
echo Usage: `basename $0` "<limit> <command>..."
echo or: `basename $0` "<memlimit> -s <swaplimit> <command>..."
exit 1
fi
cgname="limitmem_$$"
# parse command line args and find limits
limit="$1"
swaplimit="$limit"
shift
if [ "$1" = "-s" ]
then
shift
swaplimit="$1"
shift
fi
if [ "$1" = -- ]
then
shift
fi
if [ "$limit" = "$swaplimit" ]
then
memsw=0
echo "limiting memory to $limit (cgroup $cgname) for command $@" >&2
else
memsw=1
echo "limiting memory to $limit and total virtual memory to $swaplimit (cgroup $cgname) for command $@" >&2
fi
# create cgroup
sudo cgcreate -g "memory:$cgname"
sudo cgset -r memory.limit_in_bytes="$limit" "$cgname"
bytes_limit=`cgget -g "memory:$cgname" | grep memory.limit_in_bytes | cut -d\ -f2`
# try also limiting swap usage, but this fails if the system has no swap
if sudo cgset -r memory.memsw.limit_in_bytes="$swaplimit" "$cgname"
then
bytes_swap_limit=`cgget -g "memory:$cgname" | grep memory.memsw.limit_in_bytes | cut -d\ -f2`
else
echo "failed to limit swap"
memsw=0
fi
2-名前を「limitmem」として指定して/usr/bin/にコピーすると、端末から呼び出すことができますlimitmem
。次の構文を使用して、メモリ使用量を800 MBに制限するプロセスを開くことができます。limitmem 800M command
私:limitmem 1000M google-chrome --password-store=basic --aggressive-cache-discard --aggressive-tab-discard
答え2
あなたはこれを最も効率的な方法でやっているかどうか尋ねます。私はいつも私のラップトップを非常に似た方法で使用してきました。 LiveUSBを使用しながら3年間感じた点は次のとおりです。
- インストールパッケージを使用せず、
apt-get install
代わりに使用してくださいsudo dpkg -i
。これは「共有」メモリを低く保つようです(システムファイルが変更され、RAMdiskでより多くのメモリを占有します)。 - Chromiumプロセスツリー全体を終了する必要はありません。後ろに残った「残り」の閉じたタブ(しばしば
--type=renderer
プロセスと呼ばれる)だけを終了できます。次のコマンドを実行してこれを実行できます。ps aux | grep type=renderer kill -9 $(ps aux | grep type=renderer)
kill
コマンドを含むスクリプトを実行するためのキーボードショートカットを指定できます。これにより、ブラウザ全体を再ロードする必要がなくなり、通知ポップアップをクリックするだけで拡張機能を再読み込みできます。何らかの理由で、メモリオーバーヘッドは非常に低くなります。 私は1日に数回このコマンドを使用しましたが、
clean cache/buffers
時間が経つにつれて、「使用可能な」メモリではなく「使用可能な」メモリに集中するだけでよいことに気づきました。私のシステムは、100 MBの空き容量しかありません。空き容量が300MB未満であることだけを心配するだけで、通常Chromium終了ショートカットを押すと問題が解決します。利用可能なメモリが特定の下限に達するたびに「Chromium Exit」コマンドを実行する方法があるかどうかを知りたいです。
注:Zram / Zswapプログラムを試してみましたが、役に立たなかったようです。過度の使用により、システムがより頻繁に停止し、頻繁な再起動が発生しているように見えました(すでに古いハードドライブでより多くの摩耗が発生したり、再起動または中断されました)。回数が少ないほど良いです。