Ghan
12월 23, 2020, 2:32오전
1
app.yml에서 shm_size 파라미터를 옵션으로 설정할 수 있을까요? 오늘 vacuum analyze를 실행하던 중 이 오류에 직면했습니다:
ERROR: could not resize shared memory segment
shm 사용량을 1GB로 늘리려다 실패했는데, 기본값은 512MB이기 때문입니다. 이 파라미터는 현재 런처 스크립트에 있는 것으로 보이지만, .yml 파일에서 옵션으로(기본값은 주석 처리된 상태로) 제공되면 좋겠습니다.
tgxworld
(Alan Tan)
12월 23, 2020, 4:01오전
2
--docker-args를 사용하여 기본값을 덮어쓰는 커스텀 docker 인수를 전달할 수 있습니다.
echo " enter: Open a shell to run commands inside the container"
echo " logs: View the Docker logs for a container"
echo " bootstrap: Bootstrap a container for the config based on a template"
echo " run: Run the given command with the config in the context of the last bootstrapped image"
echo " rebuild: Rebuild a container (destroy old, bootstrap, start new)"
echo " cleanup: Remove all containers that have stopped for > 24 hours"
echo " start-cmd: Generate docker command used to start container"
echo
echo "Options:"
echo " --skip-prereqs Don't check launcher prerequisites"
echo " --docker-args Extra arguments to pass when running docker"
echo " --skip-mac-address Don't assign a mac address"
echo " --run-image Override the image used for running the container"
exit 1
}
# for potential re-exec later
SAVED_ARGV=("$@")
command=$1
config=$2
./launcher start app --docker-args "--shm-size=1024m"과 유사한 형태로 사용될 것입니다.
7개의 좋아요
Ghan
12월 23, 2020, 1:44오후
3
불행히도 시도해 봤는데 작동하지 않았습니다. 아마도 공유 메모리 공간의 크기를 늘리기 위해 컨테이너를 다시 빌드해야 하는 것 같습니다. 런처 스크립트의 하드코딩된 부분을 수정한 후 컨테이너를 다시 빌드해야 비로소 적용되었습니다.
이 변경 사항은 업데이트나 재빌드 후에도 유지되지 않을 가능성이 높으며, 매번 수동으로 값을 변경해야 할 것입니다.
1개의 좋아요
tgxworld
(Alan Tan)
12월 24, 2020, 1:03오전
4
어떤 명령을 실행하셨나요? --shm-size 옵션이 적용되려면 컨테이너를 다시 빌드해야 합니다.
2개의 좋아요
Ghan
12월 24, 2020, 2:40오전
5
tgxworld:
어떤 명령어를 실행하셨나요?
처음에는 컨테이너를 정지한 다음, 해당 매개변수를 포함하여 런처 시작 명령어를 실행했을 뿐입니다. 그런 다음 런처 스크립트 내부의 --shm-size 매개변수를 수동으로 편집하고 컨테이너를 다시 빌드했습니다. 그랬더니 값이 올바르게 조정되었습니다. 컨테이너를 다시 빌드할 때 명령줄에서 매개변수를 오버라이드하면, /admin/upgrade 인터페이스를 통해 업데이트/재빌드를 수행할 때 변경 사항이 사라지지 않을까요? 그래서 app.yml에 필드로 추가하는 것이 재빌드와 코드 업데이트를 통해 유지되는 것이 가장 좋을 것 같다고 생각했습니다.
1개의 좋아요
tgxworld
(Alan Tan)
12월 24, 2020, 5:46오전
6
음, 유용할 것 같네요. @sam 이거 어떻게 생각하세요?
1개의 좋아요
sam
(Sam Saffron)
12월 29, 2020, 4:52오전
7
Ghan:
/admin/upgrade 인터페이스?
하지만 컨테이너를 다시 빌드하지는 않으므로 안전합니다.
이미 다음에 따라 가지고 있지 않나요:
yaml 파일의 docker_args: .... 부분입니다.
Ghan
12월 29, 2020, 5:12오전
8
확신은 없습니다. 옵션이 하드코딩된 곳이 3곳이 보이는데, launcher 파일 자체를 덮어쓰게 되나요?
sam
(Sam Saffron)
12월 29, 2020, 5:17오전
9
이 문제를 수정해야 하지만, 수정 방법은 매우 복잡한 bash 스크립트입니다. 시도해 보셔도 좋습니다.
Docker 인수를 가져오는 함수가 shm-size를 처리하도록 해야 합니다. 사용자 오버라이드를 처리하고 기본값을 설정하는 것이죠.
2개의 좋아요
neounix
(Dark Matter)
12월 29, 2020, 5:39오전
10
@Ghan 님 안녕하세요
그동안 (테스트 목적으로, 아래 주의사항 참조) 컨테이너가 빌드된 후 docker를 사용하여 직접 변경할 수 있습니다. 방법은 다음과 같습니다:
/var/lib/docker/containers/$CONTAINER_ID/hostconfig.json 파일을 직접 편집합니다.
예를 들어, 위 파일의 ShmSize 값을 변경합니다.
컨테이너를 중지하고 다시 시작합니다.
우리의 docker 컨테이너 hostconfig 파일에서는 다음과 같이 보입니다:
"ShmSize":536870912,
도움이 되셨기를 바랍니다.
주의사항: hostconfig.json을 수정하기 전에 docker 서비스가 중지되어 있는지 확인해야 한다는(그렇지 않으면 변경 사항이 덮어쓰여질 수 있음) 게시물이 몇 건 있습니다. 그러나 저는 실제로 이를 테스트해 보지 않았습니다. 당연히 launcher 솔루션이 더 좋습니다
shm_size를 늘리는 현재 해결책이 무엇인지 아시는 분 계신가요?
수정: 여전히 하드코딩되어 있는 것 같습니다.
관련 스레드:
After upgrading (with ‘launcher rebuild app’ times two) to Postgres 10, we’ve started seeing errors like this in /logs:
Failed to handle exception in exception app middleware :
PG::DiskFull: ERROR: could not resize shared memory segment "/PostgreSQL.682207201" to 283432 bytes: No space left on device :
SELECT "topics"."id" AS t0_r0, "topics"."title" AS t0_r1, "topics"."last_posted_at" AS t0_r2, …
Ideas? Looks like PG is unable to increase the size of a shared memory segment, can this be tuned …