概述程序在长时间停顿
固定:
那么这似乎有点傻。 原来顶部显示不正确,程序实际上继续运行。 也许cpu时间变得太大,无法显示? 无论哪种方式,程序似乎工作正常,整个问题是没有意义的。
谢谢(对于这个愚蠢的问题抱歉)。
原始问:
麻烦命名pipe道和Fortran
将FORTRAN转换为C / C ++
从Fortran退出代码到linux
fortran:如何获取集群的节点名称
将命令行parameter passing给windows中的gnuplot
我在运行ubuntu服务器10.04.3的计算机上运行一个模拟。 短跑(<24小时)运行良好,但长跑最终失速。 我的意思是,程序不再有任何cpu时间,但它仍然保存所有的信息在内存中。 为了运行这些模拟,我SSH和nohup程序和pipe道输出到一个文件。
杂项信息:
系统肯定没有用完RAM。 该程序不需要读取或写入硬盘驱动器,直到完成; 计算完全在内存中完成。 该程序没有被杀死,因为它在停顿后仍然有一个PID。 我正在使用openmp,但增加了最大进程数,最大时间是无限的。 我正在使用ARPACK fortran库findmatrix的最大特征值。
任何想法是什么导致这种行为或如何恢复我目前停滞的程序?
谢谢
Gfortran警告抱怨“Wmaybe – 未初始化”
是否有免费的windows高性能Fortran(HPF)编译器?
在windows 7上编译Fortran .dll(免费)?
Fortran源代码,但没有findFortran编译器
将英特尔MKL的LAPACK与gfortran连接起来
我认为这是一个来自你的标签的OpenMP程序,虽然你从来没有实际说明这一点。 ARPACK是线程安全的吗?
这听起来像是在打一个僵局(在MPI程序中比OpenMP更常见,但这绝对是可能的)。 首先要做的就是编译调试标志,然后下一次你发现这个问题,用一个调试器附加一下,找出各个线程在做什么。 例如,对于gdb, 这里显示了一些在线程之间切换的指令。
下一次你的程序“ thread apply all where ”,把GDB附加到它上面,然后thread apply all where 。
如果你的所有线程都被阻塞,等待一些互斥量,那么你就有一个死锁。
如果他们正在等待其他的东西(例如读),那么你需要弄清楚什么阻止了 *** 作的完成。
通常在UNIX上,您不需要使用调试标志重新生成以获取有意义的堆栈跟踪。 你不会得到文件/行号,但可能不需要诊断问题。
理解一个正在运行的程序(也就是一个进程)正在做什么的一种可能的方法是用gdb program *pID*来附加一个调试器(只有在程序已经用-g启用了调试的情况下编译时才能正常工作),或者使用strace,使用strace -p *pID* 。 strace命令是一个实用程序(从技术上说,是一个在ptrace系统调用接口之上构建的专用调试器),它显示了程序或进程完成的所有系统调用。
还有一个叫做ltrace的变体,它拦截了动态库中函数的调用。
为了得到它的感觉,尝试例如strace ls
当然,如果正在运行的程序没有进行任何系统调用, strace将不会有多大的帮助。
问候。 巴西尔Starynkevitch
总结
以上是内存溢出为你收集整理的程序在长时间停顿全部内容,希望文章能够帮你解决程序在长时间停顿所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
请登录后查看评论内容