标签: threads

获取每个线程的 CPU 统计信息

我对特定应用程序中的每个线程当前的 cpu 使用情况感兴趣——准确地说是 cpu% 和 wait%。是否有可能从某个地方获取该信息?

我知道top可以按真实线程(带有 pid 的线程)拆分信息,但它没有显示每个线程的系统/用户/等待 cpu 使用情况拆分。我还想要某种方式来记录该信息。您知道任何可以做到这一点的应用程序(或 API)吗?

linux threads

18
推荐指数
3
解决办法
7万
查看次数

Apache 2.2 mpm_worker:更多线程还是更多进程?

在 Apache 中使用 Worker MPM 时,您可以调整子进程数和每个子进程的服务器线程数。

各自的优缺点是什么?在什么情况下你会增加一个或另一个?

performance threads mpm-worker apache-2.2

18
推荐指数
1
解决办法
9148
查看次数

如何获取 - 每个进程的线程数?

这是一台 Ubuntu 9.10 服务器。

另外如何查看每个进程的内存使用情况?

谢谢

ubuntu memory process threads

16
推荐指数
1
解决办法
3万
查看次数

虚拟化 CPU 内核与线程

我们在 Ubuntu 9.10 上有一个 KVM 主机系统,带有一个带有超线程的更新的四核 Xeon CPU。如英特尔产品页面所述,该处理器有 4 个内核,但有 8 个线程。/proc/cpuinfo 和 htop 都列出了 8 个处理器,尽管每个处理器都在 cpuinfo 中声明了 4 个内核。KVM/QEMU 还报告了 8 个可分配给来宾的 VCPU。

我的问题是,当我为 VM 来宾分配 VCPU 时,我应该按内核分配还是按线程分配?由于 KVM/QEMU 报告服务器有 8 个 VCPU 需要分配,我是否应该继续将客户机设置为使用 4 个 CPU,而我之前将其设置为使用 2 个(假设总共有 4 个 VCPU 可用)?我想在不过度分配的情况下最大限度地利用主机硬件。

更新: Chopper3 的答案无疑是正确的方法。但是,我仍然很想听听任何硬件专家的意见,他们可以阐明线程与内核的性能方面……有人吗?

central-processing-unit vcpu multi-core threads kvm-virtualization

9
推荐指数
3
解决办法
3万
查看次数

在 SMP 系统上使用多队列 NIC 进行多线程处理

数据包如何从网络接口队列调度到 CPU,然后再转发到线程进行处理?在涉及如何跨队列散列数据包、硬件中断与软中断、CPU/内存/应用程序/线程局部性以及多线程与多进程守护进程时,需要考虑什么,以避免尽可能多的数据包重新调度/复制?

我有一个多线程网络守护进程(比如,Unbound 解析器)在 Debian amd64 和 Linux 2.6.32(是的,旧的)上运行 16 个本机线程,因此应用程序负载分布在 16 个 CPU 上。网卡是 bnx2 (BCM5709S),支持 8 个 MSI-X rx/tx 队列。每个队列的 IRQ 通过静态映射 /proc/irq/n/smp_affinity 中的中断亲和性分配给单独的 CPU(irqbalance 从来没有做得很好),队列散列类型(RSS 类型)是默认的(IP src+dst , TCP 运动+dport),使用默认的散列键。

所有这些都有助于分散负载,但并不均匀:通常有一个应用程序线程完成其他线程两倍的工作(=每秒请求数),一个 CPU(可能是处理该特定线程的一个)软中断率是其他线程的两倍CPU。

CPU 启用了超线程,但我还没有做任何事情来在“真实”内核之间分散负载(我真的应该这样做)。

Linux 附带了一个相当全面的网络扩展文档,但我遗漏了一些空白:

该文档是关于 RSS 配置的:

如果设备支持足够的队列,典型的 RSS 配置将是每个 CPU 有一个接收队列,否则每个内存域至少有一个接收队列,其中内存域是一组共享特定内存级别(L1、L2 、NUMA 节点等)。

问:如何确定服务器的 CPU/缓存/内存域配置?

有关接收流控制 (RFS) 的信息似乎回答了我关于将数据包发送到正确的 CPU/线程的一些问题:

RFS 的目标是通过将数据包的内核处理引导到正在运行使用数据包的应用程序线程的 CPU 来提高数据缓存命中率。

Q:在DNS解析的情况下,通常有一个查询包和一个应答包。使用多线程守护进程,是否只有一个线程运行 bind()+recvfrom(),因此在将工作调度到其他线程之前,无论如何必须处理所有新传入的数据包?这个特殊的用例会从分叉操作(每个 CPU 一个进程)中受益吗?

问:那么接收流控制通常最适合多线程 TCP 守护进程吗?

Q:如何确定是多线程还是多进程操作?显然有共享内存和数据结构、资源争用等,但我正在考虑数据包流和应用程序侦听器。

问:如果没有接收流控制,或者使用简单的 UDP 服务,数据包是否会到达“错误”的 CPU,因此会以某种方式重新调度到“正确”的 CPU?这会触发 NET_RX 软中断吗?

Q:网卡队列和CPU之间是否有NET_RX软中断?CPU 和监听线程/进程之间是否也有一个?如果接收线程将数据包调度到工作线程,是否还有另一个可能?

太糟糕了,Ben Hutchings …

linux scalability load-balancing threads linux-kernel

8
推荐指数
0
解决办法
3620
查看次数

apache(忙碌的工人,空闲的工人)是什么意思?

Apache忙碌的工人和空闲的工人是什么意思?它们的统计信息如何帮助我找出服务器的性能问题?在此处输入图片说明

threads worker-process apache-2.2

6
推荐指数
1
解决办法
3万
查看次数

Nginx worker_processes 和多核 cpu 的 - 超线程核心数吗?

很多时候,当阅读有关 nginx 的推荐 worker_processes 时,会说这应该设置为托管 nginx 的服务器的核心数。

我们想知道我们是否也应该为此计算 HT 内核的数量?

还是我们只计算真正的物理内核的数量?

谢谢!

nginx multi-core threads hyperthreading

6
推荐指数
1
解决办法
4037
查看次数

启用超线程 - 在 Ubuntu Precise 64 位上导致 qthread 创建错误

我们最近为一些繁重的工作设置了一台 HP ProLiant DL360p 服务器。出于某种原因,我们在设置时禁用了系统 BIOS 中的超线程。作为双 CPU 8 核系统,这为我们提供了 16 个硬件线程。32 GB 内存。我们正在运行 Ubuntu 12.04 64 位。

大部分工作是由 VHDL“合成器”或编译器完成的。它是一个 QT 应用程序,但通常以命令行模式(无 GUI)运行。这个编译器在过去几周一直运行良好,由持续集成系统 (Jenkins) 启动。

今天,我们重新启用了超线程以访问所有 32 个硬件线程。但是现在这个编译器在我可以设计的每种情况下都挂起以下错误:

QThread::start: Thread creation error: Resource temporarily unavailable

该进程似乎已停止,不占用任何 CPU,并且 ctrl-c 中断它。

我在网上做了一些搜索,看起来这可能与操作系统最大线程限制有关,但我不确定如何更改它。无论如何,默认值应该是大约 800 个线程,这对于仅运行少量(可能是 2 个?)的编译器来说应该绰绰有余。

与此同时,我将不得不禁用超线程,但我想知道这是否是运行 64 位 Linux 的高端服务器的已知问题?有已知的解决方法吗?或者它更可能是该特定应用程序的问题?

linux ubuntu threads hyperthreading

6
推荐指数
1
解决办法
1325
查看次数

Java:限制 JVM 可以使用的内核数

多个用户在 60 核计算服务器(基于 Linux/Ubuntu)上运行 Java 应用程序。有不同的应用程序,其中大多数不是内部开发的。

虽然系统管理员认为给定用户的 Java 进程在任何给定时刻使用 10 个内核都可以,但她希望他们使用的内核不要超过 10 个。

是否有任何 Java 或 OS 配置可用于防止进程以无限方式获取计算资源?

java multi-core threads

6
推荐指数
1
解决办法
2万
查看次数

在生产服务器上调试卡住的 apache/php 线程

我有一个带有 apache httpd 和 PHP 的 linux 系统,它使用LoadModule php5_module /usr/lib/apache2/modules/libphp5.so.

我已经启用了 apache 的 mod_status 模块,我看到一个特定的线程从昨天开始就一直在做某事。我还通过ps -axu | grep apache在许多线程中执行哪个给我特定的卡住线程来确认这一点:

www-data  5636  0.0  0.1 423556 23560 ?      S    XXXXX   0:04 /usr/sbin/apache2 -k start
Run Code Online (Sandbox Code Playgroud)

请注意,XXXXX 类似于昨天的 Jan02。此外,pid (5636) 与我在 apache 的 mod_status 页面中看到的卡住线程的 pid 相匹配。

我的问题是:我怎样才能做一个线程转储或类似的事情来查看这个东西在 PHP 代码中的确切位置?也许它正在等待某些东西(I/O、网络、数据库),但我不知道是什么。

在 Java 世界中,我会做一个kill -3 pid很好的可读线程转储,它会清楚地向我展示该特定线程的确切位置。php土地有类似的技术吗?

php troubleshooting threads dump apache2

5
推荐指数
1
解决办法
4717
查看次数