问题标签 [futex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3259 浏览

c++ - 在死锁 futex 中调用 malloc 和程序时出现分段错误

我正在处理的代码有很多调用来创建新的字符串和东西。但是最近在将服务器升级到 12.10 Ubuntu 之后,我开始面临一些麻烦。一些子进程卡在futex. 于是我就去附上运行了很久GDB的运行进程,我做了一个,发现如下日志futexbacktrace

我很困惑。我检查了内存,PC 有将近 20GB 的可用 RAM 内存。那么函数崩溃的可能性有多大malloc?我明白为什么它卡在了futex,但为什么是 malloc?我真的很想得到一个解释。

崩溃发生在这样的调用之后:

调用此行以将简单的 c 字符串转换为 c++ 类型的 std::string。但是这门课是我自己的。由于主要有两个原因,我无法在这里提供整个代码。1)代码归我公司所有。2)它该死的长。

真的对不起。我只需要解释为什么它会崩溃malloc并因此导致死锁,因为它sighandler也需要malloc并且它等待前一个锁释放,而这不会。

0 投票
2 回答
818 浏览

c++ - 促进进程间ipc死锁

这是我与 boost ipc 库有关的第二篇文章。我正面临着莫名其妙的死锁,所以我想我会探索一些网络上现有的例子

我当前的问题只是对提供的示例的试用@

http://en.highscore.de/cpp/boost/interprocesscommunication.html

此示例代码导致我陷入僵局。strace 指示这两个进程:

我在 ubuntu 12.04 上使用 gcc 4.7 进行编译

任何帮助/想法为什么会这样?

PS:请注意,如果您尝试这样做,并且遇到死锁,请保留一个独立程序,该程序仅在最后执行删除命令以清除共享对象。否则 i 的计数器将从当前状态开始,而不是从 0 开始。

0 投票
2 回答
4513 浏览

linux - 调试 futex 锁

我有一个等待 futex 的进程:

我怎样才能最好地调试这种情况?我可以确定谁持有 futex 吗?是否有任何类似于 ipcs 和 ipcrm 但用于 futexes 的工具?

0 投票
1 回答
388 浏览

perl - Perl 的工作人员不处理连接,等待 futex

我们有 10 名工作人员处理用户的连接。Worker 是在 Perl 中实现的,使用FCGIFCGI::ProcManager

有时,一名工作人员会停止处理连接。Strace 显示:

那就是它睡觉,等待一个futex。

工人永远不会从等待中返回。

如果我们用

然后它的父母收获它。返回码等于 9。

我们的项目是高负荷的。这个问题很少出现。

0 投票
1 回答
807 浏览

linux - 如何检查 pthread_mutex 是否基于健壮的 futex

我正在尝试在 Linux 中使用基于 futex 的强大 pthread 互斥锁,因为我需要既快速又强大(恢复“死”锁)。如何检查任何 Linux 系统上的 pthread 互斥库是否基于健壮的 futex?

谢谢!

0 投票
0 回答
784 浏览

c++ - 解释 tcmalloc 的 MALLOCSTATS 输出

我正在尝试解决使用 tcmalloc 的多线程应用程序的性能问题。每个线程都会创建大量对象,我的分析是 tcmalloc 中的线程缓存无法分配内存,并且经常尝试从中央页堆中获取内存。这是我的应用程序的输出,其中MALLOCSTATS=2 用于 4 个线程。

255 个大 * 15 个跨度 ~ 706.3 MiB;713.5 MiB 暨;未映射:0.0 MiB;0.0 MiB 暨

现在我真的不明白这是否表明哪些线程缓存正在耗尽。我对线程缓存耗尽的分析是基于观察在 GDB 下运行的程序并解释调用 futex 系统调用的 tcmalloc 代码。

更新我还注意到,当线程数量增加/减少时,每个线程的缓存没有改变。它是增长的页堆。

0 投票
1 回答
916 浏览

linux - Linux上的快速用户空间进程间通知方法?

我们有两个 Linux 进程与域套接字通信,性能目标是通过单域套接字连接实现 5k iops 和 4k 请求大小,为了降低 cpu 成本我们用 io-ring(基于共享内存)替换域套接字,但关键“通知”步骤仍然由域套接字实现,看起来开销仍然太大。

PS:目前io depth一般为2-4,表示每次“notify”需要1k iops

信号量、pthread_condvars、基于 futex 的锁、eventfd、inotify,你更喜欢哪一个(或其他任何人),我非常关心性能和开销。谢谢!

0 投票
1 回答
55 浏览

parameters - WSO2 API 管理器:Suse 内核参数

WSO2 API Manager关于kernel parameterson是否有任何建议/要求Suse 64bit?比如无文件、信号量等?

0 投票
1 回答
1687 浏览

java - Tomcat java线程在futex()调用上旋转

我有一个简单的 3 层 Apache 服务器设置,它将请求发送到 Tomcat 服务器,该服务器查询(MySQL)数据库以生成 HTML 结果。我发现一旦启动 Tomcat,java 进程中就有线程正在旋转进行 futex() 调用。在几十个 Web 请求之后,试图为请求提供服务的线程被捕获在同一个 futex() 循环中,并且它停止响应所有请求——它们在客户端超时。

我已经在 Tomcat 6 和 Tomcat 7 中尝试过。我已经在 Oracle 的 Java 1.7.0_45 和 OpenJDK 1.6.0 中尝试过。这个虚拟机是一个 64 位 Redhat 6 系统,我已经尝试过他们发布的 2.6.32-358.23.2 内核和他们的 2.6.32-431.3.1 内核,所有组合都在 strace 中显示这些系统调用,并最终锁定向上。

JVM 使用默认内存执行此操作,或者即使我将可用内存增加到 3GB(机器上的 4GB)。我使用 GC 记录器运行,GC 打印了一些次要集合,并且在发生锁定时没有执行。这台机器创建于 2014 年 1 月,因此不处于任何“闰秒”情况。

所以我的问题是:为什么 Java 会在一个快速循环中进行所有这些 futex() 调用,即使 JVM 应该“空闲”?他们正常吗?他们应该得到超时吗?有没有已知的解决方法?

感谢您提供信息见解。

0 投票
0 回答
255 浏览

android - Android 不支持健壮的 futex,那么如何实现健壮的互斥锁呢?

我发现android ndk中的pthread.h不包含强大的futexes函数,那么如果我想访问多个进程之间的共享内存(mmap)该怎么办?

PS:现在,我使用std::shared_mutex + fcntl,其中shared_mutex是线程的,fcntl是进程的,当进程崩溃时会释放锁。它有效,但很脏。