Usando Ulimit para evitar que o computador trave (Opera)

O Scheduler sofre na minha mão em qualquer sistema operacional. Abro um monte de programas ao mesmo tempo e dentro deles muitos outros threads. As vezes uso o Firefox, Opera e Chromium de uma vez só com várias abas … isso quando não há o VirtuaBox rodando o WinXP com 1,5GB de memória reservada e ainda teimosamente estou rodando o ‘pacman -Syu’.

E roda bem! O problema são esses browsers  que as vezes descambam tudo e saem comendo memória como loucos. Cada um tem seu fraco, mas em geral o Flash complica tudo. Um java script muito pesado faz alguns browsers se perderem. Assistir a um video torna tudo mais lento por aqui.

Faz tempo que queria uma solução que mate ou limite os recursos desses browsers até que achei o óbvio: ulimit.

Ulimit

Facil de usar este comando embutido faz o que o nome sugere: Limitar os recursos para um terminal. E esses recursos podem ser memória, arquivos abertos, tamanho de arquivo, tempo de CPU e outros recursos.

Para ver seus limites atuais comande:

ulimit -a

E uma saída tipica como esta deverá ser mostrada:

core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 15217
max locked memory (kbytes, -l) 1024
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 15217
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

Para alterar o limite da memória de um terminal user:

ulimit -v MEMORIA_EM_KILO

Para voltar ao normal:

ulimit -v unlimited

Tenha em mente que somente para o terminal que ele for chamado estes limites funcionarão. Muito útil.

Opera

O executável do Opera para nossa sorte é um script em /usr/bin/opera. O default deve ser este:

#!/bin/bash
# Allow users to override command-line options
# Based on Gentoo's chromium package (and by extension, Debian's)
if [[ -f /etc/opera/default ]]; then
. /etc/opera/default
fi
# Prefer user defined CHROMIUM_USER_FLAGS (from env) over system
# default CHROMIUM_FLAGS (from /etc/chromium/default)
OPERA_FLAGS=${OPERA_USER_FLAGS:-$OPERA_FLAGS}
exec /usr/lib/opera/opera $OPERA_FLAGS "$@"

Então adicionei ulimit acima de exec e testei com 1G. Com três páginas o Opera já reclamava de falta de memória. As vezes desligava e voltava sozinho, com todas as páginas anteriores reabrindo! Isso é bom. Sem travar nada!
Então aumentei para 2G e nunca mais ele matou meu computador.

Quer testar se seu browser sofre com sites pesados? Tente nestes sites de jogos online por exemplo: diverti.com.br, poki.com.br, y8, miniclips.

Segue alteração:

#!/bin/bash
# Allow users to override command-line options
# Based on Gentoo's chromium package (and by extension, Debian's)
if [[ -f /etc/opera/default ]]; then
. /etc/opera/default
fi
# Prefer user defined CHROMIUM_USER_FLAGS (from env) over system
# default CHROMIUM_FLAGS (from /etc/chromium/default)
OPERA_FLAGS=${OPERA_USER_FLAGS:-$OPERA_FLAGS}
ulimit -v 2048576;
exec /usr/lib/opera/opera $OPERA_FLAGS "$@"

Perigos

Não se deve matar um processo do nada. E  limitar sua memória pode trazer problemas já que a maioria dos programadores não tratam falta de memória. Felizmente o Opera se comporta bem. Fique alerta que talvez você perca algum serviço em andamento. Porém como eu uso os browsers em edições remotas e para usos não criticos se eles se desligam é muito melhor para mim que impedir de fato de usar os outros programas críticos.

Anúncios

2 comentários

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s