![长时间运行的 R 脚本会被自动终止](https://linux22.com/image/78345/%E9%95%BF%E6%97%B6%E9%97%B4%E8%BF%90%E8%A1%8C%E7%9A%84%20R%20%E8%84%9A%E6%9C%AC%E4%BC%9A%E8%A2%AB%E8%87%AA%E5%8A%A8%E7%BB%88%E6%AD%A2.png)
我正在尝试为我的硕士论文运行一个实验,其中涉及一个必须运行相当长一段时间的 R 脚本(最多 24 小时 100% cpu 使用率)。这是一个单核进程,据我所知,我有足够的内存来完成这项工作。问题是,当我整夜运行它时,它会在半夜的某个时候被杀死,而我却没有启动任何操作。为了让您了解输出,这是我正在查看的内容:
➜ 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
在哪里命令是要运行的程序。通过将程序崩溃后按时间输出的时间与启动时按日期输出的时间相加,您可以得到程序崩溃的时间。多次运行并查找相同运行时间或崩溃时间等模式。还要查看不是每天在同一时间启动的每日 cronjobs。
其他原因可能是程序中的错误或使用 32 位指针的程序未能分配更多内存。