Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Mono 4.2.2垃圾收集在多线程Linux上真的很慢/泄漏吗?_Multithreading_Mono_Garbage Collection - Fatal编程技术网

Multithreading Mono 4.2.2垃圾收集在多线程Linux上真的很慢/泄漏吗?

Multithreading Mono 4.2.2垃圾收集在多线程Linux上真的很慢/泄漏吗?,multithreading,mono,garbage-collection,Multithreading,Mono,Garbage Collection,我有一个应用程序可以将3+GB的数据处理成300MB的数据。在主线程上按顺序运行每个独立的数据集,其内存使用量最高约为3.5GB,工作正常 如果在10个线程上同时运行每个数据集,我会看到以下内容: 虚拟内存使用率稳步攀升,直到分配失败并崩溃。我可以看到GC正试图在堆栈跟踪中运行) CPU利用率在周期内为1000%,然后在分钟内降至100%,然后循环备份。当使用多个线程运行时,即使它们是完全独立的,应用程序的速度也很容易降低10倍 这是针对Linux的mono 4.2.2版本,支持大堆,运行在

我有一个应用程序可以将3+GB的数据处理成300MB的数据。在主线程上按顺序运行每个独立的数据集,其内存使用量最高约为3.5GB,工作正常

如果在10个线程上同时运行每个数据集,我会看到以下内容:

  • 虚拟内存使用率稳步攀升,直到分配失败并崩溃。我可以看到GC正试图在堆栈跟踪中运行)
  • CPU利用率在周期内为1000%,然后在分钟内降至100%,然后循环备份。当使用多个线程运行时,即使它们是完全独立的,应用程序的速度也很容易降低10倍
这是针对Linux的mono 4.2.2版本,支持大堆,运行在128GB RAM和40个逻辑处理器上。我正在运行monosgen,并尝试了所有我能想到的自定义GC设置(并发标记扫描、最大堆大小等)

这些问题不会发生在Windows上。如果我重写代码来进行重要的对象池,在运行OOM之前,我会在数据集中走得更远,但命运是一样的。我已经使用多种工具和良好的旧printf调试验证了我没有内存泄漏

我最好的理论是,对于GC来说,跨多个线程的大量分配是一个很弱的例子,而且大部分挂钟时间都花在挂起我的工作线程上


有没有人有这方面的经验?有没有一种方法可以帮助GC摆脱它陷入的100%的常规,并且不耗尽内存?

另一个信息性的小贴士:在主线程中顺序运行数据集:2小时。在后台线程中按顺序运行(一次运行1个线程):6个多小时,内存使用率和时间都要高得多。另一个有用的小贴士:在主线程中按顺序运行数据集:2小时。在后台线程中按顺序运行(一次运行1个):6个多小时,内存使用率和时间都要高得多。