在负载很重的情况下,我们的应用程序正在使一个强大的服务器达到100%的CPU使用率.读取进程转储,查看线程,其中一些是10分钟.在使用时,他们都没有给我任何见解!CLRStack.
!失控给了我:
0:030> !runaway
User Mode Time
Thread Time
53:2e804 0 days 0:10:04.703
30:31894 0 days 0:07:51.593
33:47100 0 days 0:07:24.890
42:11e54 0 days 0:06:45.875
35:35e18 0 days 0:06:07.578
41:54464 0 days 0:05:49.796
47:57700 0 days 0:05:45.000
44:3c2d4 0 days 0:05:44.265
32:3898c 0 days 0:05:43.593
50:54894 0 days 0:05:41.968
51:5bc58 0 days 0:05:40.921
43:14af4 0 days 0:05:40.734
48:35074 0 days 0:05:40.406
...
Run Code Online (Sandbox Code Playgroud)
在其中一个线程上调用!DumpStack,我得到:
0000001ab442f900 00007ff9ef4c1148 KERNELBASE!WaitForSingleObjectEx+0x94, calling ntdll!NtWaitForSingleObject
0000001ab442f980 00007ff9e920beb2 clr!SVR::gc_heap::compute_new_dynamic_data+0x17b, calling clr!SVR::gc_heap::desired_new_allocation
0000001ab442f9a0 00007ff9e90591eb clr!CLREventWaitHelper2+0x38, calling kernel32!WaitForSingleObjectEx
0000001ab442f9b0 00007ff9e90e0d2c …Run Code Online (Sandbox Code Playgroud) 我正在使用 react native 模块(https://github.com/rusel1989/react-native-bluetooth-serial)与 Arduino 进行蓝牙通信。
一切正常。但是当我按下“重新加载”或由于启用了实时重新加载而重新加载应用程序时,onDestroy不会调用模块的方法。因此,套接字(和流)没有正确处理。
重新加载完成后,我无法再打开蓝牙插座。它需要我禁用和启用蓝牙,或重新启动应用程序。
当我重新加载我的应用程序时,是否有我可以实现的蚂蚁回调或方法可以正确处理这些套接字?
当前,我们正在使用StackExchange.Redis,并且由于它不提供“阻止弹出消息”,因此我们正在按照文档中的建议进行操作:
db.ListLeftPush(key, newWork, flags: CommandFlags.FireAndForget);
sub.Publish(channel, "");
Run Code Online (Sandbox Code Playgroud)
与以下内容有何不同?
db.ListLeftPushAsync(key, newWork);
sub.Publish(channel, "");
Run Code Online (Sandbox Code Playgroud)
我们知道这些命令的目的,我们想知道的是,它们在内部是否有任何差异或行为有所不同的风险?(执行命令等)