我有一个使用nginx,uWSGI和Django构build的API的web应用程序。 最近我在一个特定的API调用中看到了很多harakiris,它会进行一些快速处理,然后产生一些线程来处理一些长时间运行的函数。 主线程然后返回并且工作线程将其结果存储在caching中并退出。 在线程产生之后,它们之间没有交互。 我的uWSGI在20秒内被设置为harakiri。 这应该是足够的时间让主线程完成并返回(平均大约2-3秒)。 uWSGI是否有可能因为我的工作线程太长而返回? 如果是这样,我可以解决这个问题,而不是multithreading在python中的多处理? 谢谢!
我有一个python WSGI应用程序运行在Windows Server 2008上IIS 7.5的ISAPI扩展。我想增加工作进程的数量(我知道该怎么做),并减less每个进程的线程数(我不' T)。 我担心我可能对GIL有太多的争议。 我已经看到了这样的指令来修改每个进程的线程,但是这个设置似乎没有影响我的应用程序 – 我的w3wp进程仍然显示相同数量的线程。 我想这是因为该设置只影响ASP.NET应用程序,这不是。 我知道我可以切换到不同的python运行时间,如无堆栈或扭曲。 或者不同的主机,如Apache。 或者像Linux这样的其他操作系统。 我现在负担不起这些工作,并且正在寻找一些短期的调整。
我们有一个Windows 2012服务器,通过使用ASP.Net和.NET 4.5的基于SOAP的Web服务与许多其他服务进行通信。 这些服务往往具有更高的延迟(即,返回2-6秒)。 我们相信我们有线程问题,因为在服务器上的加载将开始产生504个网关超时。 与高延迟的基于SOAP的服务进行大量通信的服务器的最佳线程configuration是什么? 注意:所有的SOAP调用都是同步的,不幸的是我们不能改变它。 没有asynchronous 这是IIS8 / Win2012中的默认值 <system.web> <applicationPool maxConcurrentRequestsPerCPU="12" maxConcurrentThreadsPerCPU="0" requestQueueLimit="5000"/> </system.web> 我已阅读了两篇参考文章。 http://blogs.msdn.com/b/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx http:// fullsocrates .wordpress.com / 2013/02/28 / ASP-净threadstuning线程参数-22 /
我有一个Linux系统与Apache的httpd和PHP使用LoadModule php5_module /usr/lib/apache2/modules/libphp5.so加载。 我已经启用了Apache的mod_status模块,我看到一个特定的线程,从昨天开始就停滞不前。 我也通过做ps -axu | grep apache证实这一点 在许multithreading中,它给了我特定的卡住的线程: www-data 5636 0.0 0.1 423556 23560 ? S XXXXX 0:04 /usr/sbin/apache2 -k start 请注意,XXXXX就像昨天的Jan02一样。 另外,pid(5636)与我在apache的mod_status页面中看到的卡住线程的pid匹配。 我的问题是:我怎么能做一个线程转储或类似的东西,看看在哪里确切地在PHP代码中卡住这个东西? 也许它正在等待(I / O,networking,数据库),但我不知道是什么。 在java世界中,我会做一个kill -3 pid并获得一个可读的线程转储,清楚地显示出特定线程在哪里被卡住。 有没有类似的技术的PHP土地?
我很抱歉我的post的长度。 我们最近将我们的业务系统转换为由核心数量许可的产品。 我们购买了2核心许可证,目前正在VMWare上运行它。 转到下一个许可证级别是相当昂贵的。 我们有一些非常重要的性能问题。 我们已经消除了RAM作为一个瓶颈,以及networking,数据库和磁盘访问。 我们遇到的问题并不总是以高CPU使用率为特征。 有时CPU使用率低于20%,但CPU就绪率很高。 我正在思考直接在单独的物理服务器上运行它的可能性。 由于我限于两个内核,所以我会select最快的“单线程性能”CPU,我可能会得到4个内核。 然后我将业务系统设置为使用2个内核,并允许操作系统消耗其他2个内核。 我的逻辑是这样的。 现在虚拟机获得两个线程或vCPU。 这实际上只有一个pCPU。 即使我把它移动到没有超线程的同一个盒子,它也会得到2个完整核心,而不是2个vCPU。 但是如果我select单线速度更快的芯片,我可以获得更多的收益。 我也可能有一个小的收益,因为我不会再虚拟化了。 我们目前的6核CPU根据Passmark获得以下分数。 CPU标记:8570单线程性能:1403 我想要的4核心处理器得到这些分数。 CPU标记:10231单线程性能:2287 build立一个服务器是否有意义,以获得这样的应用程序的最佳单线程性能? 我有什么需要担心的吗? 一个新的操作系统会有很大的不同吗? 当前主机服务器具有以下规格:Proliant DL380 G7 2个物理CPU:Intel(R)Xeon(R)X5675 @ 3.07 GHz 6个内核每个用于24个逻辑处理器(vCPU)总数启用超线程。 144 GB的RAM 存储位于较新的SAN上,我相信这不会影响我们的性能问题。 业务系统虚拟机configuration2个vCPU和24 GB的RAM。 操作系统是Windows Server 2008 R2。 业务系统软件经过优化,可在IIS中的应用程序池中运行4 – 6 GB的RAM。 我从来没有看到虚拟机超过16 GB的使用。 我们还在主机上运行3个其他虚拟机。 一个现在真的很less,很可能会在不久的将来closures。 它有2个vCPU和8 GB的RAM。 第二个是运行我们的MS Sql数据库。 那个有8个vCPU和64GB的RAM。 我们有一个DBA看看它,他不觉得这是我们问题的原因,至less不是从数据库性能方面。 […]
我们最近设置了一台HP ProLiant DL360p服务器,用于一些繁重的工作。 出于某种原因,我们在系统BIOS中禁用了超线程 。 作为一个双CPU 8核心系统,这给了我们16个硬件线程。 32 GB RAM。 我们正在运行的Ubuntu 12.04 64位。 大部分工作是由VHDL“合成器”或编译器完成的。 这是一个QT应用程序,但通常以命令行模式(无GUI)运行。 这个编译器在过去几周运行良好,由一个持续集成系统(Jenkins)启动。 今天,我们重新启用了超线程来访问所有32个硬件线程。 然而,现在这个编译器在每个我可以devise的情况下都会挂起下面的错误: QThread::start: Thread creation error: Resource temporarily unavailable 这个过程似乎是停滞的,不占用任何CPU,并且ctrl-c中断它。 我做了一些在线search,这似乎可能与操作系统的最大线程限制相关,但我不知道如何去改变这一点。 无论如何,默认情况下大约有800个线程,对于仅运行less量(可能是2?)的编译器来说,这应该足够了。 同时,我将不得不禁用超线程,但我想知道这是否是运行64位Linux的高端服务器的已知问题? 有没有已知的解决方法? 或者更可能是该特定应用程序的问题?
数据包如何从networking接口队列调度到CPU,然后再转发到线程进行处理? 什么需要考虑到如何在队列,硬件中断vs softirqs,CPU /内存/应用程序/线程局部性,multithreading与多进程守护进程中散列数据包,以避免尽可能多的数据包重新计划/复制尽可能? 我有一个使用Linux 2.6.32(yes,old)的Debian amd64上运行16个本地线程的multithreadingnetworking守护进程(比如Unbound resolver),因此应用程序负载分布在16个CPU上。 网卡是bnx2(BCM5709S),支持8个MSI-X rx / tx队列。 每个队列的IRQ通过在/ proc / irq / n / smp_affinity中静态映射中断关联被分配给一个单独的CPU(irqbalance从来没有做好),队列哈希types(RSStypes)是默认的(src + dst ,TCP sport + dport),使用默认的散列键。 所有这些都有助于传播负载,但不是平均的:通常有一个应用程序线程执行两倍于其他线程的工作(=每秒请求数),一个CPU(可能是处理该特定线程的CPU)的softirq速率是其他线程的两倍的CPU。 CPU已经启用了超线程,但是我还没有做任何事情来传播负载到'真正'的核心(我真的应该)。 Linux提供了一个相当全面的networking缩放文档 ,但我错过了一些空白: 该文件说这关于RSSconfiguration: 如果设备支持足够的队列,则典型的RSSconfiguration将是每个CPU具有一个接收队列,否则对于每个存储器域至less一个接收队列,其中存储器域是共享特定存储器级别的一组CPU(L1,L2 ,NUMA节点等)。 问:如何确定我的服务器的CPU /caching/内存域configuration? 有关接收stream量转向(RFS)的信息似乎回答了一些关于将数据包传送到正确的CPU /线程的问题: RFS的目标是通过将数据包的内核处理引导到消耗数据包的应用程序线程正在运行的CPU来增加datacache hitrate。 问:在DNSparsing的情况下,通常有一个查询包和一个应答包。 使用multithreading守护进程,只有一个线程运行bind()+ recvfrom(),因此在将工作调度到其他线程之前,必须处理所有新的传入数据包? 这个特殊用例会从分叉操作中受益吗(每个CPU有一个进程)呢? 问:接收stream量转向后,通常最适用于multithreadingTCP守护进程? 问:你将如何确定是否进行multithreading或多进程操作? 显然有共享内存和数据结构,资源争夺等,但我在考虑包stream和应用程序监听器。 问:如果没有接收stream量转向或简单的UDP服务,数据包是否能到达“错误的”CPU,因此会被重新安排到“正确的”CPU? 这会触发一个NET_RX softirq? 问:NIC队列和CPU之间是否有NET_RX softirq? CPU和侦听线程/进程之间是否还有一个? 如果接收线程将数据包安排到工作线程,是否还有另外一个可能性? 太糟糕了,Ben Hutchings的netconf […]
我们在Ubuntu 9.10上安装了带有超线程function的新款四核至强CPU。 如英特尔产品页面上所述,处理器有4个内核,但有8个线程。 / proc / cpuinfo和htop都列出了8个处理器,但是每个处理器在cpuinfo中声明4个核心。 KVM / QEMU也报告可以分配给客人的8个VCPU。 我的问题是,当我分配VCPU到VM guest,我应该分配每个内核还是每个线程? 由于KVM / QEMU报告服务器有8个VCPU要分配,我应该继续设置一个guest虚拟机来使用4个CPU,我以前曾经设置它使用2(假设有4个总的VCPU可用)? 我想从主机硬件中获得最大的可能,而不会过度分配。 更新: Chopper3的答案无疑是正确的做法。 不过,我仍然喜欢听到那里的硬件专家谁可以阐明线程与核心的性能方面…任何人?
在Apache中使用Worker MPM时,可以调整subprocess的数量和每个subprocess的服务器线程数。 每个的优点和缺点是什么? 在什么情况下你会增加一个呢?
这是一个Ubuntu 9.10服务器。 另外如何查看每个进程的内存使用情况? 谢谢