Como limitar a quantidade de RAM que o WINE vê?

0

Eu tenho um programa que quero usar, mas é muito antigo e mede a RAM em kilobytes. Ele não será iniciado porque reclama que não pode ser executado com menos de 5000K RAM (embora eu tenha muito mais). Como posso limitar a quantidade de RAM que o WINE vê / conta sobre os programas?

    
por Aaron Franke 12.03.2017 / 09:27

1 resposta

0

Não sei se isso funcionará, mas encontrei um script aqui que limita a memória de um processo.

O script é o seguinte:

#!/bin/sh

set -eu

if [ "$#" -lt 2 ]
then
        echo Usage: 'basename $0' "<limit> <command>..."
        exit 1
fi

limit="$1"
shift

cgname="limitmem_$$"
echo "limiting memory to $limit (cgroup $cgname) for command $@" >&2

cgm create memory "$cgname" >/dev/null
cgm setvalue memory "$cgname" memory.limit_in_bytes "$limit" >/dev/null
# try also limiting swap usage, but this fails if the system has no swap
cgm setvalue memory "$cgname" memory.memsw.limit_in_bytes "$limit" >/dev/null 2>&1 || true
bytes_limit='cgm getvalue memory "$cgname" memory.limit_in_bytes | tail -1 | cut -f2 -d\"'

# spawn subshell to run in the cgroup
# set +e so a failing child does not prevent us from removing the cgroup
set +e
(
set -e
cgm movepid memory "$cgname" 'sh -c 'echo $PPID'' > /dev/null
exec "$@"
)

# grab exit code 
exitcode='echo $?'

set -e

peak_mem='cgm getvalue memory "$cgname" memory.max_usage_in_bytes | tail -1 | cut -f2 -d\"'
failcount='cgm getvalue memory "$cgname" memory.failcnt | tail -1 | cut -f2 -d\"'
percent='expr "$peak_mem" / \( "$bytes_limit" / 100 \)'
echo "peak memory used: $peak_mem ($percent%); exceeded limit $failcount times" >&2

cgm remove memory "$cgname" >/dev/null

exit $exitcode

Você terá que instalar cgmanager ( sudo apt-get install cgmanager ), mas é pouco mais do que a metade de um megabyte.

É possível que o WINE (ou o executável) detecte toda a RAM que você tem, apesar do limite, caso em que isso provavelmente falhará. Se isso acontecer, você sempre poderá excluir o script e, em seguida, desinstalar cgmanager com um rápido sudo apt-get autoremove --purge cgmanager .

    
por pixelherodev 12.03.2017 / 10:05