我最近修改了一些代码,并在函数中的一行上发现了一个预先存在的错误:
std:;string x = y;
Run Code Online (Sandbox Code Playgroud)
此代码仍然编译并一直按预期工作.
字符串定义是有效的,因为这个文件是using namespace std;,因此std::首先是不必要的.
问题是,为什么std:;编译以及它做了什么,如果有的话?
在我的工作中,我们遇到了难以重现的OOM问题.或者,更准确地说,它很容易在一个系统上重现,使得该系统无法使用,但在相同的输入下难以在其他任何地方重现.
应用程序使用服务包装器作为服务运行.我们确实设法更改配置以启动它,并选择在OOM上输出堆转储文件,但不幸的是,它们被截断,很可能是由于服务包装器超时并在写入文件时终止进程.这很明显,因为最大内存设置为1GB,而hprof文件小到700MB,这对于OOM上的整个堆来说太小了.
需要花费大量资金来进一步配置包装器以使java进程有更长的时间来写出堆,但我们正在使用这两个选项来实现这一点:
wrapper.jvm_exit.timeout=600
wrapper.shutdown.timeout=600
Run Code Online (Sandbox Code Playgroud)
问题是,我能用截断的hprof文件做些什么有用吗?Eclipse MAT扼杀它们.Jhat似乎加载了它们,但随后只显示了3个大小为0的Java.Object实例.我试过YourKit,它无法写出它的oids文件.
在我看来,这些文件应该包含一些有用的,可访问的信息.有没有一个工具可以读取那里有什么?
感谢您的时间!