편집 1: 방금 정지 현상이 발생하여 복구할 수 있었습니다. 정지 상태부터 현재까지의 로그(syslog):https://ufile.io/ivred
편집 2: 이는 GDM3의 버그/문제인 것 같습니다. 나는 Xubuntu를 시험해 볼 것이다.
편집 3: 이제 Xubuntu를 사용하고 있습니다. 문제는 여전히 발생하지만 빈도는 훨씬 낮습니다. 그럼 .. 정말 메모리 문제입니다.
HD가 종료된 이후 현재 Ubuntu 18.10 Live CD를 사용하고 있습니다. RAM이 4GB밖에 없기 때문에 주로 메모리 소비를 위해 LiveCD를 일부 사용자 정의했습니다.
사용 가능한 메모리가 100MB 미만으로 떨어지면 펜 드라이브 LED가 미친 듯이 깜박이기 시작하고 시스템이 정지되어 GUI 인터페이스를 종료하고( Ctrl++...) 다시 시작(++)하거나 때로는 Google Chrome 및 .Altf1f12CtrlAltDelsudo killall chrome
그래서 시스템 캐시를 정리하고 Google Chrome을 닫는 매우 간단한 스크립트를 만들었습니다. 탭이 제대로 닫히지 않으면 탭을 복원하라는 메시지가 표시되므로 이렇게 갑자기 Chrome을 닫아도 괜찮습니다.
질문:95%의 경우 그것은 매력처럼 작동합니다. 내 스크립트가 너무 단순한지 아니면 재부팅이 필요하기 때문에 로그를 확인할 수 없기 때문에 간헐적으로 정지되는 다른 원인이 있는지 모르겠습니다.이를 수행하는 더 효율적인 방법이 있습니까? 내가 뭐 잘못 했어요?
관찰: 15분마다 실행되는 캐시를 정리하는 또 다른 스크립트가 있습니다. 이 스크립트를 만들었기 때문에 거의 문제 없이 LiveCD를 매일 사용할 수 있습니다. 하루에 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 메모리 사용량을 성공적으로 제한할 수 있었습니다. 수십 개의 탭을 동시에 열어서 테스트했는데 메모리 제한이 실제로 작동하는 것을 볼 수 있습니다. 하지만 크롬을 주로 사용하는데도 시스템 캐시도 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
. 이제 다음 구문을 사용하여 메모리 사용량을 800MB로 제한하는 프로세스를 열 수 있습니다.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
명령이 포함된 스크립트를 실행하기 위한 키보드 단축키를 지정할 수 있습니다 . 이렇게 하면 전체 브라우저를 다시 로드할 필요가 없으며 알림 팝업을 클릭하기만 하면 확장 프로그램을 다시 로드할 수 있습니다. 어떤 이유로든 이후 메모리 오버헤드는 매우 낮게 유지됩니다. 나는 하루에 여러 번 이 명령을 사용했지만
clean cache/buffers
시간이 지나면서 "사용 가능한" 메모리보다는 "사용 가능한" 메모리에만 집중하면 된다는 것을 깨달았습니다. 내 시스템은 100MB의 여유 공간만 있어도 잘 작동합니다. 여유 공간이 300MB 미만인 것에 대해서만 걱정할 뿐이며 일반적으로 Chromium 종료 단축키를 누르면 문제가 해결됩니다.사용 가능한 메모리가 특정 하한에 도달할 때마다 "Chromium 종료" 명령을 실행하는 방법이 있는지 알고 싶습니다.
참고: Zram/Zswap 프로그램을 사용해 보았지만 도움이 되지 않은 것 같습니다. 과도한 사용으로 인해 시스템이 더 자주 정지되어 잦은 재부팅이 발생하는 것 같았습니다(이미 오래된 하드 드라이브에 더 많은 마모가 발생하거나 재부팅되거나 중단됨). 횟수가 적을수록 좋습니다).