天道酬勤,学无止境

为什么 JVM 会因为 NTDLL.DLL 而在 Windows Server 2012 上随机崩溃?(Why does JVM randomly crashes on Windows Server 2012 due to NTDLL.DLL?)

问题

我的生产服务器偶尔会崩溃 java.exe 服务,因此 myApplication Server Glassfish 4.1。 它随机发生,到目前为止我找不到解释这种行为的理由。

检查 Win Server 2012 事件查看器,表明应用程序错误是由于与 NTDLL.DLL 冲突。

在下面,我发布了这些崩溃之一后收集的转储:

Version=1
EventType=APPCRASH
EventTime=130971776990222439a
ReportType=2
Consent=1
ReportIdentifier=60c166c2-ba16-11e5-8100-22000afdaf63
IntegratorReportIdentifier=60c166c1-ba16-11e5-8100-a22000afdaf63
NsAppName=java.exe
Response.type=4
Sig[0].Name=Application Name
Sig[0].Value=java.exe
Sig[1].Name=Application Version
Sig[1].Value=8.0.650.17
Sig[2].Name=Application Timestamp
Sig[2].Value=56145db1
Sig[3].Name=Fault Module Name
Sig[3].Value=StackHash_6589
Sig[4].Name=Fault Module Version
Sig[4].Value=6.3.9600.18185
Sig[5].Name=Fault Module Timestamp
Sig[5].Value=5683f0c5
Sig[6].Name=Exception Code
Sig[6].Value=c0000374
Sig[7].Name=Exception Offset
Sig[7].Value=PCH_2E_FROM_ntdll+0x00000000000913EA
DynamicSig[1].Name=OS Version
DynamicSig[1].Value=6.3.9600.2.0.0.272.7
DynamicSig[2].Name=Locale ID
DynamicSig[2].Value=1033
DynamicSig[22].Name=Additional Information 1
DynamicSig[22].Value=6589
DynamicSig[23].Name=Additional Information 2
DynamicSig[23].Value=6589bd364537aa3998376ce788c85b36
DynamicSig[24].Name=Additional Information 3
DynamicSig[24].Value=ceeb
DynamicSig[25].Name=Additional Information 4
DynamicSig[25].Value=ceebd98f2e612b8c0235a9736a6de63a
UI[2]=C:\Program Files\Java\jdk1.8.0_65\bin\java.exe
UI[5]=Check online for a solution (recommended)
UI[6]=Check for a solution later (recommended)
UI[7]=Close
UI[8]=Java(TM) Platform SE binary stopped working and was closed
UI[9]=A problem caused the application to stop working correctly. Windows will notify you if a solution is available.
UI[10]=&Close
LoadedModule[0]=C:\Program Files\Java\jdk1.8.0_65\bin\java.exe
LoadedModule[1]=C:\Windows\SYSTEM32\ntdll.dll
LoadedModule[2]=C:\Windows\system32\KERNEL32.DLL
LoadedModule[3]=C:\Windows\system32\KERNELBASE.dll
LoadedModule[4]=C:\Windows\system32\apphelp.dll
LoadedModule[5]=C:\Windows\AppPatch\AppPatch64\AcGenral.DLL
LoadedModule[6]=C:\Windows\system32\msvcrt.dll
LoadedModule[7]=C:\Windows\SYSTEM32\SspiCli.dll
LoadedModule[8]=C:\Windows\system32\SHLWAPI.dll
LoadedModule[9]=C:\Windows\system32\USER32.dll
LoadedModule[10]=C:\Windows\system32\ole32.dll
LoadedModule[11]=C:\Windows\system32\SHELL32.dll
LoadedModule[12]=C:\Windows\SYSTEM32\USERENV.dll
LoadedModule[13]=C:\Windows\system32\ADVAPI32.dll
LoadedModule[14]=C:\Windows\SYSTEM32\MPR.dll
LoadedModule[15]=C:\Windows\system32\RPCRT4.dll
LoadedModule[16]=C:\Windows\SYSTEM32\sechost.dll
LoadedModule[17]=C:\Windows\SYSTEM32\combase.dll
LoadedModule[18]=C:\Windows\system32\GDI32.dll
LoadedModule[19]=C:\Windows\SYSTEM32\profapi.dll
LoadedModule[20]=C:\Windows\SYSTEM32\SHCORE.dll
LoadedModule[21]=C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.9600.17810_none_6240b9c7ecbd0bda\COMCTL32.dll
LoadedModule[22]=C:\Program Files\Java\jdk1.8.0_65\jre\bin\msvcr100.dll
LoadedModule[23]=C:\Program Files\Java\jdk1.8.0_65\jre\bin\server\jvm.dll
LoadedModule[24]=C:\Windows\SYSTEM32\WSOCK32.dll
LoadedModule[25]=C:\Windows\SYSTEM32\WINMM.dll
LoadedModule[26]=C:\Windows\SYSTEM32\VERSION.dll
LoadedModule[27]=C:\Windows\system32\PSAPI.DLL
LoadedModule[28]=C:\Windows\system32\WS2_32.dll
LoadedModule[29]=C:\Windows\SYSTEM32\WINMMBASE.dll
LoadedModule[30]=C:\Windows\system32\NSI.dll
LoadedModule[31]=C:\Windows\SYSTEM32\cfgmgr32.dll
LoadedModule[32]=C:\Windows\SYSTEM32\DEVOBJ.dll
LoadedModule[33]=C:\Program Files\Java\jdk1.8.0_65\jre\bin\verify.dll
LoadedModule[34]=C:\Program Files\Java\jdk1.8.0_65\jre\bin\java.dll
LoadedModule[35]=C:\Program Files\Java\jdk1.8.0_65\jre\bin\instrument.dll
LoadedModule[36]=C:\Program Files\Java\jdk1.8.0_65\jre\bin\zip.dll
LoadedModule[37]=C:\Windows\SYSTEM32\CRYPTSP.dll
LoadedModule[38]=C:\Windows\system32\rsaenh.dll
LoadedModule[39]=C:\Windows\SYSTEM32\bcrypt.dll
LoadedModule[40]=C:\Windows\system32\bcryptprimitives.dll
LoadedModule[41]=C:\Windows\SYSTEM32\CRYPTBASE.dll
LoadedModule[42]=C:\Program Files\Java\jdk1.8.0_65\jre\bin\net.dll
LoadedModule[43]=C:\Windows\system32\mswsock.dll
LoadedModule[44]=C:\Windows\SYSTEM32\IPHLPAPI.DLL
LoadedModule[45]=C:\Windows\SYSTEM32\WINNSI.DLL
LoadedModule[46]=C:\Windows\SYSTEM32\dhcpcsvc6.DLL
LoadedModule[47]=C:\Windows\SYSTEM32\dhcpcsvc.DLL
LoadedModule[48]=C:\Program Files\Java\jdk1.8.0_65\jre\bin\nio.dll
LoadedModule[49]=C:\Windows\system32\napinsp.dll
LoadedModule[50]=C:\Windows\system32\NLAapi.dll
LoadedModule[51]=C:\Windows\SYSTEM32\DNSAPI.dll
LoadedModule[52]=C:\Windows\System32\winrnr.dll
LoadedModule[53]=C:\Windows\System32\rasadhlp.dll
LoadedModule[54]=C:\Windows\System32\fwpuclnt.dll
LoadedModule[55]=C:\Program Files\Java\jdk1.8.0_65\jre\bin\management.dll
LoadedModule[56]=C:\Program Files\Java\jdk1.8.0_65\jre\bin\attach.dll
LoadedModule[57]=C:\Program Files\Java\jdk1.8.0_65\jre\bin\awt.dll
LoadedModule[58]=C:\Windows\system32\OLEAUT32.dll
LoadedModule[59]=C:\Program Files\Java\jdk1.8.0_65\jre\bin\sunec.dll
LoadedModule[60]=C:\glassfish4\glassfish\domains\server\applications\server_amazon\WEB-INF\lib\SystemFiles\Libraries\Windows-x86-64\JLinkNativeLibrary.dll
LoadedModule[61]=C:\Windows\system32\COMDLG32.dll
FriendlyEventName=Stopped working
ConsentKey=APPCRASH
AppName=Java(TM) Platform SE binary
AppPath=C:\Program Files\Java\jdk1.8.0_65\bin\java.exe
NsPartner=windows
NsGroup=windows8
ApplicationIdentity=B83E0FFFC973469340275FB99F876701

有谁知道如何解决它?

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Visual Studio 2010 反复崩溃(Visual Studio 2010 crashes repeatedly)
    问题 我已经运行 Visual Studio 2010(官方版本)有一段时间了。 最近,在我 8 小时的工作日内,VS 会崩溃 10 多次。 在 VS2008 中,处理大型 Xaml 文件时崩溃很常见,虽然我在 VS2010 中遇到过一些崩溃,但在调试、启动调试器、停止调试器和编辑代码时的其他随机时间时会发生崩溃。 我查看了问题报告,我发现最常出现的问题是: 描述错误的应用程序路径:C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe 问题签名问题事件名称:APPCRASH 应用程序名称:devenv.exe 应用版本:10.0.30319.1 应用时间戳:4ba1fab3 故障模块名称:ntdll.dll 故障模块版本:6.1.7600.16385 故障模块时间戳:4a5bdb3b 异常代码:c0000005 异常偏移:0002e23e 我正在运行 Windows 7 (x64)。 希望有人遇到过这个问题并找到了解决方案。 我打算重新安装VS2010。 希望这能解决问题。 回答1 您是否认为您安装了任何可能导致频繁崩溃的额外扩展? 你可以试试 Devenv.exe /SafeMode 以安全模式启动。 你也可以试试 Devenv.exe /Log 这将记录所有活动。
  • 安装IE9后,Visual Studio 2012崩溃(错误模块ntdll.dll)(Visual Studio 2012 Crashes after installing IE9 (Faulting Module ntdll.dll))
    问题 好的.... 自从Visual Studio RTM在我的工作计算机上发布以来,我一直在运行它。 上周五,我安装了IE并将其更新至版本9,以测试JavaScript问题。 安装IE9并重新启动计算机后,Visual Studio 2012不再起作用,它将打开并显示开始页面约一秒钟,然后崩溃。 我尝试了以下失败: 恢复为IE8-仍然崩溃运行devenv / SafeMode-仍然崩溃运行devenv / ResetSettings-仍然崩溃修复VS2012-仍然崩溃完全卸载VS2012并重新安装-仍然崩溃完全卸载VS2012,删除所有VS2012文件夹和注册表项,然后重新安装-仍然崩溃 (重新)更新为IE9,卸载vs2012并重新安装-仍然崩溃 (每一个细致的步骤后无数重新启动) PS我无法运行“系统还原”,因为该操作“已被您的管理员禁用”,如果我可以使用的话,该操作将在上述步骤4之前进行... 当我运行devenv(是否使用安全模式)时,在应用程序事件日志中得到以下信息: Faulting application name: devenv.exe, version: 11.0.50727.1, time stamp: 0x5011ecaa Faulting module name: ntdll.dll, version: 6.1.7601.17725, time stamp
  • Eclipse 已随机停止加载(Eclipse has randommly stopped loading)
    问题 因此,在大约一个月的不工作之后,我像往常一样打开了 eclipse(单击任务栏中的图标),然后……什么也没有。 有一些硬盘驱动器活动,但没有进程真正保持活动状态,如果它们启动的话。 在进一步调查后,我发现如果我以管理员身份运行可执行文件(顺便说一下,我正在运行 Windows 7),则会出现启动画面,但在进度条出现之前,它崩溃了,生成了一个名为hs_err_pid2620.txt的文件,其中包含以下内容: # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000779b0895, pid=2620, tid=996 # # JRE version: 7.0_03-b05 # Java VM: Java HotSpot(TM) 64-Bit Server VM (22.1-b02 mixed mode windows-amd64 compressed oops) # Problematic frame: # C [ntdll.dll+0x50895] # # Failed to write core dump. Minidumps are not enabled by
  • 程序仅在发布版本时崩溃-如何调试?(Program only crashes as release build — how to debug?)
    问题 我这里遇到的是“薛定inger之猫”类型的问题-我的程序(实际上是我程序的测试套件,但仍然是一个程序)崩溃了,但仅当在发布模式下构建时才发生崩溃,并且仅当从命令行启动时才崩溃。 通过穴居人调试(即到处都是讨厌的printf()消息),我确定了代码崩溃的测试方法,但是不幸的是,实际的崩溃似乎发生在某些析构函数中,因为我看到的最后一条跟踪消息在其他执行干净的析构函数。 当我尝试在Visual Studio中运行该程序时,它不会崩溃。 从WinDbg.exe启动时也是如此。 仅在从命令行启动时才发生崩溃。 顺便说一句,这是在Windows Vista下发生的,不幸的是,我现在无法使用XP计算机进行测试。 如果我可以让Windows打印出堆栈跟踪信息,或者可以像终止程序一样干净地终止程序,那将是非常不错的选择。 是否有人对我如何在此处获取一些更有意义的信息以及希望修复此错误有任何建议? 编辑:问题确实是由越界数组引起的,我将在本文中对此进行更多描述。 感谢大家对发现此问题的帮助! 回答1 在我见过或听说过的100%的情况下,C或C ++程序在调试器中运行良好,但在外部运行时失败,其原因一直是在函数局部数组的末尾写入。 (调试器将更多内容放到了堆栈上,因此您不太可能覆盖重要的内容。) 回答2 当我遇到这样的问题之前,通常是由于变量初始化引起的。 在调试模式下,变量和指针会自动初始化为零
  • .NET 4.5:.NET 运行时中的内部错误 (80131506)/禁用并发 GC(.NET 4.5: internal error in the .NET Runtime (80131506) / disabling concurrent GC)
    问题 我有一个长期运行的 .NET 4.5 应用程序随机崩溃,并在事件日志的问题标题中留下了我提到的消息。 该问题在 3 台不同的机器和 2 个不同的系统(2008 R2 和 2012)上重现。 应用程序不使用任何不安全/非托管组件,它是纯托管的 .NET,唯一非托管的东西是 CLR 本身。 这是我从转储中提取的崩溃站点的堆栈跟踪: clr.dll!MethodTable::GetCanonicalMethodTable() clr.dll!SVR::CFinalize::ScanForFinalization() - 0x1a31b bytes clr.dll!SVR::gc_heap::mark_phase() + 0x328 bytes clr.dll!SVR::gc_heap::gc1() + 0x95 bytes clr.dll!SVR::gc_heap::garbage_collect() + 0x16e bytes clr.dll!SVR::gc_heap::gc_thread_function() + 0x3e bytes clr.dll!SVR::gc_heap::gc_thread_stub() + 0x77 bytes kernel32.dll!BaseThreadInitThunk() + 0x1a bytes ntdll.dll
  • Java 随机崩溃(可能的罪魁祸首:ntdll.dll?)(Java Randomly Crashing (Possible Culprite: ntdll.dll?))
    问题 我有一个用 Java 编写的程序,并使用 Windows 任务计划程序设置为每 5 分钟运行一次。 它执行“C:\Program Files\Java\jre7\bin\javaw.exe”并传递 jar 文件和所有命令行参数。 在大多数情况下,这运行得非常好,但时不时地,我会回到我的计算机并看到一个弹出窗口,说“Java(TM) Platform SE 二进制文件已停止工作”。 所以,起初,我认为这与我的代码有关,并添加了许多附加到文本文件的调试语句。 当它崩溃时,我检查了文本文件,其中没有列出未完成的运行。 然后我在我的主要方法中添加了一个打印语句: public static void main (String[] args) { System.out.println ("Main Method Called"); new Runner (args); } 然后我不断地从命令行运行 Java 程序,直到它崩溃,我注意到一些有趣的事情。 在崩溃时,它从未打印过“调用的主要方法”。 现在,我觉得这很有趣,因为这告诉我崩溃的不是我的 Java 程序,而是 Java 本身。 然后我继续向我的命令行添加详细的打印语句: java -verbose:class -verbose:gc -verbose:jni -jar ... 从那里,我继续这个过程,直到程序再次失败。 当它失败时
  • 为什么 ntdll.dll 会导致我的 C++ 可执行文件崩溃?(Why is ntdll.dll crashing my c++ executable?)
    问题 我无法让 Visual C++ 可执行文件工作,应用程序崩溃,这是我在事件查看器中看到的。 Faulting application name: submit.exe, version: 0.0.0.0, time stamp: 0x50a3cce7 Faulting module name: ntdll.dll, version: 6.1.7601.17514, time stamp: 0x4ce7ba58 Exception code: 0xc0000374 Fault offset: 0x000ce653 Faulting process id: 0x8fc Faulting application start time: 0x01cdc2a3da4f2997 Faulting application path: c:\submit.exe Faulting module path: C:\Windows\SysWOW64\ntdll.dll Report Id: 1813823a-2e97-11e2-8675-000c29229191 在旧版本的 Visual Studio 中编译的可执行文件可以工作,但我在使用 2008 或 2010 等较新的 VS 编译的可执行文件时出现错误。请指教 回答1 解决此类问题可能是一个真正的挑战……尤其是当您不熟悉代码库时。
  • Why does JVM randomly crashes on Windows Server 2012 due to NTDLL.DLL?
    My production server occasionaly crashes the java.exe sevice and therefore myApplication Server Glassfish 4.1. It happens randomly and so far I couldn't find a reason to explain such behavior. Checking Win Server 2012 Event Viewer, it is stated that the Application Error is due to conflict with NTDLL.DLL. Down below I post the dump collected after one of these crashes: Version=1 EventType=APPCRASH EventTime=130971776990222439a ReportType=2 Consent=1 ReportIdentifier=60c166c2-ba16-11e5-8100-22000afdaf63 IntegratorReportIdentifier=60c166c1-ba16-11e5-8100-a22000afdaf63 NsAppName=java.exe Response
  • iTunes 共享库中 PyObject_Call() 的分段错误(Segmentation-fault with PyObject_Call() in shared library for iTunes)
    问题 我正在试验 iTunes SDK 和 Cython。 DLL 入口点似乎有效,但使用任何“真正的 Python”都会导致 iTunes 崩溃。 以下代码编译良好,iTunes 成功加载了 plugin-dll。 cimport libc.stdio as stdio cdef extern from "iTunesAPI/iTunesAPI.h": ctypedef int OSType ctypedef int OSStatus ctypedef struct PluginMessageInfo: pass int unimpErr cdef public OSStatus iTunesPluginMain( OSType message, PluginMessageInfo* messageInfo, void* refCon ): cdef stdio.FILE* fl = stdio.fopen('C:/itunes_cyplugin_feedback.txt', 'wb') return unimpErr 但是添加 Python 表达式会导致 iTunes 崩溃,例如: # ... cdef public OSStatus iTunesPluginMain( OSType message, PluginMessageInfo* messageInfo, void*
  • 微软的 ASLR 很奇怪(Microsoft's ASLR is weird)
    问题 我观看了 32 位进程的基于 ASLRed dll图像的地址。 这不是完全随机化。 它只是随机化了 1/2 的概率。 例如,一旦我加载了一个 dll,图像就会加载到0x12345678 上。 然后我再次加载图像,图像加载到0x23456789 上。(基地址已更改!) 但我再次加载图像 0x12345678 0x23456789 0x12345678 0x23456789 ... 他们为什么这样做? 是为了崩溃报告的频率吗?(为了获得重新部署的 dll 的相同崩溃地址) 回答1 这是设计使然。 通常,Windows 会在首次加载 DLL 时为 ASLR DLL 选择首选基地址,然后它会一直使用该地址,直到系统重新启动。 这样,DLL 将在加载它的每个进程中映射到相同的地址,从而允许共享代码页。 但是,如果 DLL 已从每个进程卸载,系统有时可能会在下次加载 DLL 时选择不同的基地址。 这样做是为了减少虚拟地址空间碎片,而不是出于安全原因。 这就是您的情况似乎正在发生的事情。 回答2 它被记录为位于 256 个可能的起始地址之一。 但我认为它甚至不适用于进程,而是适用于共享 DLL。 ASLR:对于过程映像,默认情况下不启用。 这是一个选择加入的东西,为了兼容性。(3) 地址空间布局随机化 (ASLR) ASLR 在系统启动时将可执行映像移动到随机位置
  • 如何调试 CLR 未处理的异常(How to debug exception not handled by CLR)
    问题 我正在开发一个 .NET 应用程序,它在看似随机的时间崩溃。 它引用了一个非托管的 dll,我怀疑它抛出了一个未处理的异常。 当应用程序崩溃时,如果没有附加调试器(编译为单击一次),我会收到此消息: 此时我可以附加 VS2012 作为调试器并查看调用堆栈: > ntdll.dll!77e015de() Unknown [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] ntdll.dll!77e015de() Unknown ntdll.dll!77e8861b() Unknown ntdll.dll!77eae656() Unknown ntdll.dll!77eae6d3() Unknown ntdll.dll!77e573bc() Unknown ntdll.dll!77e57261() Unknown ntdll.dll!77e3b459() Unknown ntdll.dll!77e3b42b() Unknown ntdll.dll!77e3b3ce() Unknown ntdll.dll!77df0133() Unknown msvcr100.dll!71fb0269() Unknown msvcr100.dll!71fb0146() Unknown
  • 在符号服务器中没有 Windows DLL 的确切版本的情况下进行事后故障转储调试(Post-mortem crash-dump debugging without having the exact version of a Windows DLL in the Symbol Server)
    问题 在我的应用程序中,每当我的应用程序崩溃时,我都会使用 MiniDumpWriteDump 函数(请参阅 dbghelp.dll)来编写崩溃转储文件。 我还使用符号服务器来存储我所有的可执行文件和 pdb 文件,这样每当客户向我发送故障转储文件时,调试器都会自动选择正确版本的可执行文件和调试信息。 我还将 Windows DLL(ntdll.dll、kernel32.dll、...)及其调试信息存储在符号服务器中(使用 SymChk)。 调试信息是从 Microsoft 的公共符号服务器获取的。 大多数情况下,这很完美,除非: 客户在其中一个 Windows DLL 中崩溃客户使用我没有放入符号服务器的 DLL 这是因为将每个 Windows DLL 的每种风格都存储在 Symbol Server 中是完全不可能的(尤其是每周补丁)。 因此,如果客户崩溃,例如 NTDLL.DLL 的 5.2.123.456 版本,而我没有将这个确切版本的 DLL 放入我的 Symbol Server,那么我就被卡住了。 甚至微软的公共符号服务器也无济于事,因为它只提供调试信息,而不是 DLL 本身。 我目前的解决方案是向客户询问他的 DLL,但这并不总是那么容易。 因此,我正在寻找更好的解决方案。 有没有办法让调试器显示正确的调用堆栈,或加载特定 DLL 的调试信息,即使您没有 DLL
  • 在 Visual Studio 中调试转储文件(Debugging dump files in Visual Studio)
    问题 我使用的是 Visual Studio 2010 专业版和 Windows Vista。 首先,我有这个代码。 如您所见,它会使程序崩溃! using System; namespace Crash { class Program { static void Main(string[] args) { string a = null; if (a.Length == 12) { // ^^ Crash } } } } 程序将在 if 语句上崩溃。 现在,我想知道它在那个 if 语句上崩溃了。 如果我从 Visual Studio“启动而不调试”,则 Crash.exe 会崩溃。 它使用 1,356kb 的内存。 我得到了关闭程序/调试的 Vista 选项。 如果我选择调试,我可以打开一个新的 Visual Studio 实例,它会指向 if 语句中的 NullReferenceException。 这很好。 现在让我假设它在另一台计算机上崩溃,我让他们通过任务管理器给我一个转储文件。 它是 54,567kb。 怎么这么大! 它是广阔的! 反正我对那个不太感兴趣(稍微) 如果我用 Windbg 打开那个转储,我的未经训练的眼睛几乎没有用: Microsoft (R) Windows Debugger Version 6.12.0002.633 X86 Copyright (c)
  • Windows最接近fork()的东西是什么?(What is the closest thing Windows has to fork()?)
    问题 我想这个问题说明了一切。 我想在Windows上进行分叉。 什么是最相似的操作以及如何使用它。 回答1 Cygwin在Windows上具有全功能的fork()。 因此,如果您可以接受使用Cygwin,那么在性能不成问题的情况下,可以解决此问题。 否则,您可以看看Cygwin如何实现fork()。 从一个相当老的Cygwin的体系结构文档中可以得出: 5.6。 流程创建Cygwin中的fork调用特别有趣,因为它无法在Win32 API上很好地映射。 这使得正确实施非常困难。 当前,Cygwin分支是一种非写时复制实现,类似于早期UNIX版本中提供的实现。 父进程派生子进程时发生的第一件事是,父进程为子进程初始化了Cygwin进程表中的空间。 然后,它使用Win32 CreateProcess调用创建一个暂停的子进程。 接下来,父进程调用setjmp保存其自己的上下文,并在Cygwin共享内存区域(在所有Cygwin任务之间共享)中设置指向此上下文的指针。 然后,通过从其自己的地址空间复制到暂挂的子代的地址空间中,来填充子代的.data和.bss节。 初始化子级的地址空间后,在父级等待互斥时运行子级。 孩子发现使用已保存的跳转缓冲区已将其分叉并进行了长时间跳跃。 然后,孩子设置父母正在等待的互斥锁,并阻止另一个互斥锁。 这是父级将其堆栈和堆复制到子级中的信号
  • Visual Studio CPU使用率高(Visual Studio CPU High Usage)
    问题 这是我拥有任何Visual Studio(2010专业版,2012专业版和2015社区版)的一周,几分钟后,我开始一个项目,甚至是空的,没有任何接触,就启动了一个完全消耗一个核心,100%使用率的线程。 从任务管理器中,我已经看到devenv.exe占用了25%的CPU,我有4个内核,所以100/4 = 25。 通过使用Process Explorer,我已经看到连续运行的clr.dll ( clr.dll!GetCLRFunction + 10793 )。 这是线程的堆栈跟踪: ntoskrnl.exe!KeWaitForMultipleObjects+0xc0a ntoskrnl.exe!KeAcquireSpinLockAtDpcLevel+0x712 ntoskrnl.exe!KeWaitForSingleObject+0x19f ntoskrnl.exe!PoStartNextPowerIrp+0xba0 ntoskrnl.exe!PoStartNextPowerIrp+0x183d ntoskrnl.exe!IoFreeErrorLogEntry+0x297 System.ni.dll+0x19ab70 System.ni.dll+0x1de979 System.ni.dll+0x19ab70 System.ni.dll+0x199d42 System.ni
  • 为什么Environment.Exit()不再终止程序?(Why does Environment.Exit() not terminate the program any more?)
    问题 这是我几天前发现的,我从这个问题中得到了确认,它不仅限于我的机器。 最简单的复制方法是启动Windows Forms应用程序,添加按钮并编写以下代码: private void button1_Click(object sender, EventArgs e) { MessageBox.Show("yada"); Environment.Exit(1); // Kaboom! } Exit()语句执行后,程序失败。 在Windows窗体上,您会收到“错误创建窗口句柄”。 启用非托管调试可以使事情更加清晰。 COM模态循环正在执行,并允许传递WM_PAINT消息。 这对处置形式是致命的。 到目前为止,我收集到的唯一事实是: 它不仅限于与调试器一起运行。 如果没有,这也将失败。 同样非常糟糕的是,WER崩溃对话框显示了两次。 它与过程的复杂性无关。 wow64层是非常臭名昭著的,但是AnyCPU构建会以相同的方式崩溃。 它与.NET版本无关,4.5和3.5崩溃的方式相同。 退出代码无关紧要。 在调用Exit()之前先调用Thread.Sleep()并不能解决问题。 在Windows 8的64位版本上会发生这种情况,并且Windows 7似乎不会以相同的方式受到影响。 这应该是相对较新的行为,我之前从未见过。 我没有看到通过Windows Update交付的相关更新
  • JVM 崩溃 EXCEPTION_ACCESS_VIOLATION (0xc0000005)(JVM Crashing EXCEPTION_ACCESS_VIOLATION (0xc0000005))
    问题 我最近遇到了 jvm 崩溃的问题。 这最初是在我运行 Windows 8.1 时开始发生的,但是前几天我重新安装了 Windows 7,但问题仍然存在。 我已经安装了 JDK 和 JRE,它们是按这个顺序安装的。 版本为 8.0.310.13。 基本上,这在运行时随机发生,并且发生在两个完全不同的程序中。 其中一个是 Eclipse Luna 4.4.1,另一个是 JAR。 以下是来自 JAR 的两个最新 hs_err_pid 文件的上半部分: # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000055e200d5, pid=4764, tid=5664 # # JRE version: Java(TM) SE Runtime Environment (8.0_31-b13) (build 1.8.0_31-b13) # Java VM: Java HotSpot(TM) 64-Bit Server VM (25.31-b07 mixed mode windows-amd64 compressed oops) # Problematic frame: # V [jvm.dll
  • 在 javafx webview 中加载 URL 会导致 JVM 崩溃(Loading URLs in javafx webview is crashing the JVM)
    问题 我正在将一些 url 加载到 javafx webview 中。 我在这里做一个爬网操作,使用 javafx webview 和它的引擎。 但是JVM经常崩溃。 我无法从下面的崩溃日志中找出任何内容。 请帮忙。 # # A fatal error has been detected by the Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000076fe3290, pid=6164, tid=9896 # # JRE version: Java(TM) SE Runtime Environment (7.0_67-b01) (build 1.7.0_67-b01) # Java VM: Java HotSpot(TM) 64-Bit Server VM (24.65-b04 mixed mode windows-amd64 ) # Problematic frame: # C [ntdll.dll+0x53290] # # Failed to write core dump. Minidumps are not enabled by default on client versions of Windows # # If you would like to
  • 如何调试“传递给 C 运行时函数的参数无效”?(how to debug “Invalid parameter passed to C runtime function”?)
    问题 背景 我有大约 1 TB 的原始数据文件,以及相对较小的标记数据子集。 我已经编写了 C++ 代码(调用了一些古老的 MSVC++2003 代码,我对其进行了大量修改以使其在最近的编译器上编译)来聚合带注释的数据切片。 标记数据的很大一部分集中在一个文件中,但结果证明该文件是我的程序崩溃的地方。 问题 我越来越 Invalid parameter passed to C runtime function. Invalid parameter passed to C runtime function. terminate called after throwing an instance of 'int' 在我的 Qt 输出窗口中,windows 在弹出窗口中告诉我相同的信息,但此时从可执行文件/调试器中获取任何有用的信息似乎为时已晚(尽管我对 Qt 的调试器完全没有经验)。 我试过的 我到处搜索,发现很多人都有这个错误消息,但它太笼统了,他们的问题都不会和我的一样,而且有很长的不同 C 运行时函数列表,筛选所有这些函数都很慢它似乎没有帮助。 我的问题 “找到一个人一个错误,你可以帮助他一天。教一个人调试,你可以帮助他一生。在 stackoverflow 上发布方法,你帮助很多人并获得很多赞成。” 是否有通用方法来查找问题所在的 C 运行时函数以及参数是什么?
  • 为什么Windows 10在我的程序中启动额外的线程?(Why does Windows 10 start extra threads in my program?)
    问题 使用Visual Studio 2015,在一个新的空C ++项目中,为控制台应用程序生成以下内容: int main() { return 0; } 在返回值上设置一个断点,然后在调试器中启动程序。 在Windows 7上,从断点开始,该程序只有一个线程。 但是在Windows 10上,它有五个(!)线程:主线程和四个等待同步对象的“工作线程”。 谁在启动线程池(或如何查找)? 回答1 水晶球说Debug> Windows> Threads窗口在ntdll.dll!TppWorkerThread显示了这些线程。 确保启用Microsoft Symbol Server自己查看此信息,请使用“工具”>“选项”>“调试”>“ Symbols”。 这在VS2013中也会发生,因此绝对不是由VS2015的新诊断功能引起的,@ Adam的猜测是不正确的。 TppWorkerThread()是线程池线程的入口点。 当我在此函数上使用“调试”>“新建断点”>“函数断点”设置断点时。 当第二个线程池线程开始执行时,我很幸运地捕获到了第一个线程池线程的堆栈跟踪: ntdll.dll!_NtOpenFile@24() Unknown ntdll.dll!LdrpMapDllNtFileName() Unknown ntdll.dll!LdrpMapDllSearchPath() Unknown