diff options
-rwxr-xr-x | oom-test.sh | 76 |
1 files changed, 23 insertions, 53 deletions
diff --git a/oom-test.sh b/oom-test.sh index a74d62d..b84e757 100755 --- a/oom-test.sh +++ b/oom-test.sh @@ -2,7 +2,8 @@ KERNEL_REPO="https://github.com/rsalveti/linux.git" TEST_TIME=$((6*60*60)) # 6 hours = 6 * 60 * 60 seconds -BIG_MEM_TRUNK=$(awk '/MemTotal/{printf "%d\n", $2 * 0.7;}' < /proc/meminfo) +MEM_TRUNK=$(awk '/MemTotal/{printf "%d\n", $2 * 0.2;}' < /proc/meminfo) +BG_WORKER_NO=$(cat /proc/cpuinfo | grep processor | wc -l) stress-ng --help > /dev/null 2>&1 if [ $? -ne 0 ];then @@ -14,79 +15,48 @@ build_kernel() { local build_kernel_pid + # clone kernel source + echo "Cloning kernel source from: ${KERNEL_REPO}" + #git clone ${KERNEL_REPO} + echo "Start building kernel.." cd linux make clean > /dev/null 2>&1 make defconfig > /dev/null 2>&1 make Image modules > ../build_kernel.log 2>&1 & - build_kernel_pid=$! - cd .. - echo ${build_kernel_pid} } -big_allocator() +stress_ng_workload() { - # allocate 60% of total memory - stress-ng --vm-bytes ${BIG_MEM_TRUNK}k --vm-keep --vm 1 >/dev/null 2>&1 & - echo $! + echo "Start ${BG_WORKER_NO} background stress-ng workers.." + stress-ng --random ${BG_WORKER_NO} > /dev/null 2>&1 & } -over_allocator() +mem_allocator() { - # allocate 30% of total memory, it suould be over allocated - stress-ng --vm-bytes $(awk '/MemTotal/{printf "%d\n", $2 * 0.3;}' < /proc/meminfo)k --vm-keep --vm 1 >/dev/null 2>&1 -# echo $? + # allocate 20% of total memory + stress-ng --vm-bytes ${MEM_TRUNK}k --vm-keep --vm 1 >/dev/null 2>&1 & } -check_pid() -{ - local rcode - pid_to_check=$1 - - rcode=0 - if ! ps -p ${pid_to_check} > /dev/null ; then - wait ${pid_to_check} - pid_exit_code=$? - rcode = 1 - fi - echo ${rcode} -} - -# clone kernel source -echo "Cloning kernel source from: ${KERNEL_REPO}" -#git clone ${KERNEL_REPO} - START_TIME=$(date +%s) -echo "Allocating ${BIG_MEM_TRUNK}k memory.." -bapid=$(big_allocator) -echo "Big trunk memory allocator pid: ${bapid}" -echo "Start to build kernel" -bkpid=$(build_kernel) -echo "Build kernel PID: ${bkpid}" -echo "Start OOM test.." +echo "Start background workload.." +#build_kernel +stress_ng_workload +echo "Start OOM test.." while [ $(($(date +%s)-${START_TIME})) -lt ${TEST_TIME} ] do echo -n "." - [ $(check_pid ${bapid}) -ne 0 ] && bapid=$(big_allocator) - if [ $(check_pid ${bkpid}) -ne 0 ]; then - if [ ${pid_exit_code} -ne 0 ]; then - echo "\nKernel build failed, test failed!!" - exit 1 - else - echo "Kernel built successfully, start another round.." - bkpid=$(build_kernel) - echo "Build kernel PID: ${bkpid}" - fi - fi - # Over allocate memory to trigger OOM - over_allocator + mem_allocator - sleep 10 + sleep 5 done -[ $(check_pid ${bapid}) -eq 0 ] && kill -9 ${bapid} -[ $(check_pid ${bkpid}) -eq 0 ] && kill -9 ${bkpid} +# kill all stress-ng process +for p in `ps aux|grep stress-n[g]|awk '{print $2}'` +do + kill -9 $p +done echo "Test successfully!" exit 0 |