ImageMagick 변환 및 낮은 RAM


12

imagemagick 패키지에 대해 다음 명령을 고려하십시오 :

sudo convert -resize 460x200 /path/to/test1.jpg /path/to/test2.jpg

이제 test1.jpgA는 매우 큰 이미지 (12.5MB)는, 그러나 크기의 전례가없는,하지만 난에서 일하고 서버는 (메모리 1G가 아마존 EC2를 t2.micro 도움이된다면)

오류가 발생하지 않았지만 아직 test2.jpg생성 되지 않았습니다 . 더 작은 이미지로 이것을 테스트했으며 정상적으로 작동합니다. 메모리가 크기 조정을 관리하기에 충분하다면 1G를 생각했을 것입니다.

내 옵션은 무엇입니까, 더 많은 메모리를 확보해야합니까, 아니면 뭔가 빠졌습니까?

어떤 제안이라도 환영합니다!

요청 된 수정

strace 출력 결과 : 정상적으로 보이는 많은 명령 +++ killed by SIGKILL +++과 함께 ( 긴 문자열 열기 및 읽기, 이미지 데이터라고 가정)/usr/share/local

무료로 나에게 :

         total       used       free     shared    buffers     cached
Mem:       1016292     278348     737944       6412        460      13356
-/+ buffers/cache:     264532     751760
Swap:            0          0          0

따라서 스왑이 활성화되지 않은 것처럼 보이므로 스왑 파일을 만들어 내 문제가 정렬되는지 확인합니다.

파일은 다음을 제공합니다.

testprint10Mbv2.jpg: JPEG image data, EXIF standard

또한 전체 / path / to / img를 붙여 넣지 만 불행히도 민감한 데이터 (클라이언트 이메일 주소 등)가 포함되어 있습니다.


1
sudo이 명령에서 왜 사용 하고 있습니까?
Charles Green

1
내가하지 않으면 "Killed"메시지를 받았습니다
Aphire

3
Ypu는 인수로 픽셀 캐시에 사용되는 메모리를 제한하려고 시도 할 수 있습니다 -limit memory 64MiB(32MiB는 아마도 너무 작습니다. 기본값은 1.5GiB입니다). 그리고 실패 할 경우 설명적인 결과를 제공해야합니다.
dadexix86

2
명령 strace앞에 추가 된 명령을 실행하여 어떤 시스템 호출이 발생했는지, 오류가 발생했는지 확인하십시오. 우리에게 알려주십시오
Sergiy Kolodyazhnyy

2
끝난. 문제가 해결되어 다행입니다. 무료 출력은 스왑이 해제되었음을 확인하고 파일 정보는 잘못 식별 된 파일이 아니라는 것을 확인합니다. 좋은 편집! +1
Geek

답변:


7

RAM이 부족하다고 가정합니다. watch cat /proc/meminfo프로세스가 실행되는 동안 이를 확인할 수 있습니다 .

작업을 수행하기에 RAM 및 / 또는 SWAP가 충분하지 않을 수 있습니다.

낮은 램 상태로 인해 swapon -a스왑이 켜져 있고 시스템에 스왑이 설정되어 있지 않은 경우 사용되지 않는 디스크 공간에 스왑을위한 파티션을 만들고 활성화하십시오. 문제가 해결 될 것입니다. 이 작업을 수행하는 방법에 대한 @Takkat에 의해 좋은 답변있다 여기에는 서버 파티션에 액세스 할 수없는 경우 당신은 또한 사용할 수있는 스왑 스왑


1
OP는 클라우드 서버에 관한 것으로 스왑 파티션을 만드는 것은 옵션이 아닐 수 있습니다. 새 스왑 파일을 추가 하는 방법도 추가 할 수 있습니다 .
user.dz

@Sneetsher 바로 내가 한 일, 좋은 의견
Aphire

@Sneetsher "OP는 클라우드 서버에 관한 것"이 문제의 데이터에서 분명하지는 않았지만 좋은 지적입니다. 답변 편집.
Geek

@ElderGeek, 실제로 강조되었지만 잘 강조 표시되지 않았으므로 Amazon EC2 t2.micro다른 관련 질문에 쉽게 연결할 수 있도록 태그를 추가하고 명확하게 추가하기 위해 질문을 편집했습니다.
user.dz

@Sneetsher 나는 지금 그것을 본다. 당신의 노력에 감사드립니다!
Geek

5

문제의 문제는 적절한 스왑을 추가하여 해결되었습니다. 완벽 성을 기하기 위해 convert메모리 부족 시스템의 대용량 파일에서 Image Magick 를 실행 하거나 사용 가능한 스왑이 없거나 스왑이 너무 작은 경우에 추가 옵션을 요약 해 보겠습니다 .

아래 언급 된 방법은 Image Magick 설명서에 자세히 설명되어 있습니다.

매우 방대한 이미지 처리


요약:

  1. 옵션으로 메모리 사용 제한 -limit

    이렇게하면 Image Magick은 주어진 메모리 제한을 초과하자마자 이미지 처리를위한 임시 파일을 만듭니다. 임시 파일 디렉토리에서 Image Magick에 대한 쓰기 권한이 필요합니다. 환경 변수에서 임시 파일이 생성 될 경로를 지정할 수 있습니다 MAGICK_TMPDIR. 예제 명령은 다음과 유사 할 수 있습니다.

        env MAGICK_TMPDIR=/tempdir nice -5 convert -limit memory 32 -limit map 32 largefile.jpg -resize 640x320 smallfile.png
    

    RAM이 아닌 디스크에서 작업하면 처리 속도가 상당히 느려집니다.

  2. "메모리 매핑 디스크 파일"작업

    MPC 파일을 작성하려면 자원이 많이 필요하지만 MPC 파일에서 변환하는 데 많은 자원이 필요하지 않습니다. 따라서 동일한 매개 변수를 다른 매개 변수로 여러 번 변환해야하는 경우를 고려할 수 있습니다. 워크 플로는 다음과 유사 할 수 있습니다.

    convert huge.jpg huge.mpc
    convert huge.mpc -resize 50% big.png
    convert huge.mpc -resize 20% small.png
    convert huge.mpc -resize 5% thumb.png
    
  3. 다음을 사용하여 이미지의 작은 섹션에서 작업 stream

    스트림 클레임을 사용 하여 전체 이미지를 메모리에로드 할 필요없이 소스 이미지의 일부만 처리합니다.

    stream -map rgb -storage-type char -extract 600x400+1900+2900 image.png - | convert -depth 8 -size 600x400 rgb:- tile.png
    

    위의 예 -extract에서이 옵션은 Image Magick 형상에 정의 된대로 크기 및 오프셋 값을 사용 합니다 . 크기가 조정 된 이미지를 전체적으로 가져 오려면 타일을 다시 붙여야합니다. 불행히도 스트림 은 모든 이미지 형식에서 작동하지는 않지만 JPEG 이미지에서는 제대로 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.