Por favor, considere o seguinte comando para o pacote imagemagick:
sudo convert -resize 460x200 /path/to/test1.jpg /path/to/test2.jpg
Agora test1.jpg
é uma imagem bastante grande (12,5 MB), mas não tem tamanho inédito, mas o servidor no qual estou trabalhando tem apenas 1 G de memória ( Amazon EC2 t2.micro, se ajudar)
Nenhum erro está sendo lançado e ainda não test2.jpg
está sendo criado. Eu testei isso com imagens menores e funciona bem. Eu teria pensado 1G se a memória seria suficiente para gerenciar um redimensionamento, mas talvez não?
Quais são minhas opções, tenho que obter mais memória ou estou perdendo alguma coisa?
Todas as sugestões são bem-vindas!
Edições solicitadas
strace output shows: +++ killed by SIGKILL +++
junto com vários comandos que parecem normais (abrindo /usr/share/local
e lendo longas strings, que eu assumo serem dados de imagem)
grátis me dá:
total used free shared buffers cached
Mem: 1016292 278348 737944 6412 460 13356
-/+ buffers/cache: 264532 751760
Swap: 0 0 0
Portanto, parece que a troca não está ativada, portanto, vou criar um arquivo de troca para ver se isso classifica meus problemas.
O arquivo me fornece:
testprint10Mbv2.jpg: JPEG image data, EXIF standard
Gostaria também de colar o / path / to / img completo, mas infelizmente ele contém dados confidenciais (endereços de e-mail do cliente etc.)
sudo
este comando?-limit memory 64MiB
(32MiB é um pouco pequeno provavelmente. O padrão é 1.5GiB). E deve fornecer uma saída descritiva, caso falhe.strace
anexado na frente do comando, veja quais chamadas do sistema são feitas, erros gerados. Deixe-nos saber #Respostas:
Estou assumindo que você está ficando sem memória RAM. Você pode verificar isso
watch cat /proc/meminfo
enquanto seu processo estiver em execução.Você pode ter RAM e / ou SWAP insuficientes para realizar sua tarefa.
Devido à condição de baixa ram,
swapon -a
verifique se a troca está ativada e, se nenhuma troca estiver configurada no sistema, crie uma partição para troca no espaço em disco não utilizado e ative-a. Isso provavelmente resolverá o problema. Há uma boa resposta de @Takkat sobre como fazer isso aqui. Se você não tem acesso ao particionamento do servidor, também pode usar um arquivo de swap para trocafonte
Amazon EC2 t2.micro
, editei a pergunta para deixar clara a tag adicionada também para facilitar a vinculação a outras questões relacionadas.O problema na pergunta foi resolvido adicionando a troca apropriada. Para completar, deixe-me dar um resumo das opções adicionais que temos ao executar o Image Magick
convert
em arquivos enormes em sistemas com pouca memória, ou quando não há troca disponível ou a troca era muito pequena.Os métodos mencionados abaixo são detalhados no manual Image Magick:
Manipulação de imagem realmente massiva
Resumo:
Limitar o uso de memória com a opção
-limit
Ao fazer isso, o Image Magick criará um arquivo temporário para manipulação de imagens assim que os limites de memória especificados forem excedidos. Isso precisa de permissão de gravação para o Image Magick no diretório de arquivos temporários. Podemos fornecer qualquer caminho em que o arquivo temporário será criado em uma variável de ambiente
MAGICK_TMPDIR
. Um comando de exemplo pode ser semelhante a este:Trabalhar no disco, e não na RAM, diminuirá consideravelmente a velocidade de processamento.
Trabalhar com "Arquivos de disco mapeados na memória"
Criar arquivos MPC exige muitos recursos, mas não precisa de muitos recursos para converter de arquivos MPC. Portanto, isso pode ser levado em consideração no caso de precisarmos converter a mesma fonte com parâmetros diferentes várias vezes. O fluxo de trabalho pode ser semelhante a este:
Trabalhe em pequenas seções de uma imagem usando
stream
Usando stream declarações de para processar apenas uma parte da imagem de origem sem a necessidade de carregar toda a imagem na memória.
No exemplo acima, a
-extract
opção aceita valores de tamanho e deslocamento, conforme definido pela geometria da Image Magick . Teremos que juntar os ladrilhos novamente para obter a imagem em escala como um todo. Infelizmente, o fluxo não funciona para todos os formatos de imagem, mas deve funcionar bem em imagens JPEG.fonte