程序在长时间停顿

程序在长时间停顿,第1张

概述程序在长时间停顿

固定:

那么这似乎有点傻。 原来顶部显示不正确,程序实际上继续运行。 也许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

总结

以上是内存溢出为你收集整理的程序在长时间停顿全部内容,希望文章能够帮你解决程序在长时间停顿所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1155811.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存