Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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
CentOS:在运行多线程应用程序时,自旋锁消耗大量CPU 我正在运行一个用C++编写的多线程应用程序。顶部的命令输出显示应用程序正在消耗大部分CPU,并且它是作为系统CPU而不是用户CPU消耗的。然后我想到运行perf top命令,它显示: 76.02% [kernal] [k] _spin_lock 1.87% libc-2.12.so [.] _init_free 1.55% [kernal] [k] futex_wake 1.48% libc-2.12.so [.] _init_malloc 1.37% libc-2.12.so [.] malloc 0.77% [kernal] [k] __audit_syscall_exit 0.76% libc-2.12.so [.] __lll_lock_wait_private 0.59% libc-2.12.so [.] free_C++_Linux_Centos_Spinlock_Futex - Fatal编程技术网

CentOS:在运行多线程应用程序时,自旋锁消耗大量CPU 我正在运行一个用C++编写的多线程应用程序。顶部的命令输出显示应用程序正在消耗大部分CPU,并且它是作为系统CPU而不是用户CPU消耗的。然后我想到运行perf top命令,它显示: 76.02% [kernal] [k] _spin_lock 1.87% libc-2.12.so [.] _init_free 1.55% [kernal] [k] futex_wake 1.48% libc-2.12.so [.] _init_malloc 1.37% libc-2.12.so [.] malloc 0.77% [kernal] [k] __audit_syscall_exit 0.76% libc-2.12.so [.] __lll_lock_wait_private 0.59% libc-2.12.so [.] free

CentOS:在运行多线程应用程序时,自旋锁消耗大量CPU 我正在运行一个用C++编写的多线程应用程序。顶部的命令输出显示应用程序正在消耗大部分CPU,并且它是作为系统CPU而不是用户CPU消耗的。然后我想到运行perf top命令,它显示: 76.02% [kernal] [k] _spin_lock 1.87% libc-2.12.so [.] _init_free 1.55% [kernal] [k] futex_wake 1.48% libc-2.12.so [.] _init_malloc 1.37% libc-2.12.so [.] malloc 0.77% [kernal] [k] __audit_syscall_exit 0.76% libc-2.12.so [.] __lll_lock_wait_private 0.59% libc-2.12.so [.] free,c++,linux,centos,spinlock,futex,C++,Linux,Centos,Spinlock,Futex,我不知道为什么它会吃掉那么高的系统CPU。该应用程序在其他使用Ubuntu操作系统的Linux机器上运行良好,在我看来,它与CentOS有关 应用程序是用C++编写的,在高系统CPU的时候有大约250个活动线程。 应用程序确实会进行大量malloc/免费呼叫 操作系统:Linux-2.6.32-358.18.1.el6.x86_64-x86_64-with-centos-6.4-Final libc版本:2.12 机器中的内核数:16升级内核可能会有所帮助。您可以从源代码编译一个最近的内核。这是

我不知道为什么它会吃掉那么高的系统CPU。该应用程序在其他使用Ubuntu操作系统的Linux机器上运行良好,在我看来,它与CentOS有关

应用程序是用C++编写的,在高系统CPU的时候有大约250个活动线程。 应用程序确实会进行大量malloc/免费呼叫

操作系统:Linux-2.6.32-358.18.1.el6.x86_64-x86_64-with-centos-6.4-Final libc版本:2.12
机器中的内核数:16

升级内核可能会有所帮助。您可以从源代码编译一个最近的内核。这是这个内核版本的已知问题吗?你认为这是因为malloc/free调用吗?我不熟悉CentOS,但我的最新内核是3.17.1I,我怀疑你的自旋锁时间在做malloc或free之外的事情。但是,如果不了解应用程序的功能,很难说清楚什么。您能描述一下整个代码的功能吗?自旋锁是对一般锁的一种机会主义优化,由应用程序开发人员自行决定使用。弄清楚你的自旋锁为什么会占用这么多CPU的神奇之处在于确定应用程序在锁被持有时在做什么。自旋锁本身并不是很慢,而是应用程序执行自旋锁本身中的任何操作所花费的时间比最初预期的要长。请注意,在自旋锁中放置malloc或free通常是一个可怕的想法