나는 꽤 오랜 시간 동안(100% CPU 사용량에서 최대 24시간) 실행해야 하는 R 스크립트와 관련된 석사 논문 실험을 실행하려고 합니다. 이것은 단일 코어 프로세스이며 제가 아는 한 작업을 수행하는 데 충분한 메모리가 있습니다. 문제는 밤새 실행하면 아무것도 시작하지 않고도 한밤중에 언젠가 종료된다는 것입니다. 출력에 대한 아이디어를 제공하기 위해 제가 보고 있는 내용은 다음과 같습니다.
➜ r-lda git:(master) ✗ Rscript slda-test-gibbs-1E6-01.r | tee slda-test-gibbs-1E6-01.log
Loading required package: lattice
Loading required package: ggplot2
Loading required package: methods
[1] "LOADING DATASET: data/split_1E6.dat"
[1] "DATASET LOADED"
[1] "TRAINING DATASET SIZE: 800000"
[1] "TESTING DATASET SIZE: 200000"
[1] "VOCAB SIZE: 129276"
[1] "TRAINING E=50 M=2 K=600"
[1] 17722 killed Rscript slda-test-gibbs-1E6-01.r |
17723 done tee slda-test-gibbs-1E6-01.log
이것이 많은 정보가 아니라는 것을 알고 있지만 이 증상을 추가로 진단하는 방법은 실제로 모르겠습니다. 벌써 두 번이나 그런 일이 일어났는데 무슨 일이 일어났는지 모르겠습니다. 나는 일반적으로 R 스크립트를 그렇게 많이 사용하지 않으며 인터넷 검색에서 실제 설명을 찾지 못했습니다. 내 시스템에 대한 아이디어를 제공하려면 다음을 수행하십시오.
➜ r-lda git:(master) ✗ uname -a
Linux ****** 4.2.5-1-ARCH #1 SMP PREEMPT Tue Oct 27 08:13:28 CET 2015 x86_64 GNU/Linux
➜ r-lda git:(master) ✗ head -n26 /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 60
model name : Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz
stepping : 3
microcode : 0x12
cpu MHz : 3499.863
cache size : 8192 KB
physical id : 0
siblings : 8
core id : 0
cpu cores : 4
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt
bugs :
bogomips : 7015.72
clflush size : 64
cache_alignment : 64
address sizes : 39 bits physical, 48 bits virtual
power management:
➜ r-lda git:(master) ✗ free -h
total used free shared buff/cache available
Mem: 15G 3.4G 10G 291M 1.4G 11G
Swap: 15G 773M 15G
어떤 통찰력이라도 대단히 감사하겠습니다. 미리 감사드립니다.
답변1
시작하기 가장 좋은 곳은 로그를 사용하는 것입니다. 애플리케이션 로그에 유용한 정보가 표시되지 않는다고 말씀하셨으므로 dmesg 및 cron 작업과 같은 시스템 로그를 확인해야 합니다. dmesg의 일반적인 항목은 OOM(메모리 부족) 오류인데 사용 가능한 메모리가 충분하다고 말합니다. 충돌 시간을 얻으려면 내가 선호하는 방법은 다음을 실행하는 것입니다.
date; time command
어디주문하다실행되는 프로그램입니다. 프로그램이 충돌한 후의 시간별로 출력되는 시간과 프로그램이 시작된 날짜별로 출력되는 시간을 더하면 프로그램이 충돌한 시간을 얻을 수 있습니다. 여러 번 실행하고 동일한 실행 시간이나 충돌 시간과 같은 패턴을 찾습니다. 또한 매일 같은 시간에 시작되지 않는 일일 cronjob을 살펴보세요.
다른 원인은 프로그램의 버그이거나 32비트 포인터를 사용할 때 프로그램이 더 많은 메모리를 할당하지 못하는 것일 수 있습니다.