저는 busybox 버전을 사용하여 임베디드 Linux를 개발 중입니다. Linux 코어 덤프를 생성하려면 다음을 사용합니다.
ulimit -c unlimited
그러다가 거대한 코어 파일(~1GB)을 얻었음을 확인했습니다. 내 응용 프로그램이 거대하고 너무 많은 메모리를 할당하기 때문입니다.
이제 저는 이 대용량 코어 파일을 최적화할 솔루션을 찾고 있습니다. 내가 찾은(http://man7.org/linux/man-pages/man5/core.5.html) 코어 덤프를 프로그램에 파이프할 수 있습니다. 코어 덤프를 생성하는 동안 압축하려고 합니다.
즉
cat /proc/sys/kernel/core_pattern
| /tmp/shellscript.sh /tmp/core.%p.gz
cat /tmp/shellscript.sh
#!/bin/sh
/bin/gzip > "$1"
이제 "코어 덤프를 프로그램으로 전송"은 다음에서만 작동한다는 것을 깨달았습니다.일반 데스크탑 우분투 시스템.
그러나 우리의 목표는 임베디드 Linux 시스템의 비지박스 버전을 사용하는 것입니다. busybox에서 "프로그램으로 코어 덤프 전송(이 경우 압축)"과 똑같은 단계를 수행할 때 코어 덤프가 전혀 생성되지 않는지 궁금합니다.
그러나 busybox에서 파이프 옵션을 제거하면 코어 덤프가 표시됩니다. 즉
root@(none):~ cat /proc/sys/kernel/core_pattern
/tmp/core_top
비지박스 버전이 포함된 임베디드 Linux에서 코어 덤프를 프로그램으로 파이핑하는 것이 작동하지 않는 이유를 아는 사람이 있습니까?
감사해요,
답변1
man 5 core
* The program must be specified using an absolute pathname (or a
pathname relative to the root directory, /), and must immediately
follow the '|' character.
|
따라서 및 사이에는 공백이 없어야 합니다 /
.
/tmp
또한 스크립트가 있는 파티션에 스크립트가 설치되어 있을 수도 있습니까 -o noexec
?