在客户的生产环境中,我有一个奇怪的问题。 除了SQL服务器在虚拟服务器上运行之外,我不能在基础结构上提供任何细节。 数据,日志和文件stream文件位于另一个存储服务器上(数据和文件stream一起login到一个单独的服务器上)。 在我们的本地testing环境中,有一个执行这些持续时间的特定查询: 首先我们清除caching 300ms(第一次需要更长的时间,但从此开始caching。) 20ms的 15毫秒 17MS 在客户的生产环境中,SQL Serverfunction更强大,这是持续时间(我没有权限清除caching,明天就试试)。 在2500ms 2600ms 2400ms 客户的生产环境中的服务器function更强大,但他们确实有虚拟服务器(我们不这样做)。 可能是什么原因… 内存不足? 不成? 物理存储? 你将如何解决这个性能问题? 编辑: 有人问我数据集是否相等。 我在我们的环境中恢复他们的数据库 的确,这是我所看到的第一件事情。 (@Everyone:我添加了编辑,因为这将是许多人会想到的第一件事)。
我们将在〜1000台服务器上推出调优(和numad),其中大部分是NetApp或3Par存储上的VMware服务器。 根据RedHats文档,我们应该selectvirtual-guestconfiguration文件。 它在做什么可以在这里看到: tuned.conf 我们正在将IO调度程序更改为NOOP,因为VMware和NetApp / 3Par都应该为我们做足够的调度。 然而,经过调查了一下,我不知道为什么他们增加了vm.dirty_ratio和kernel.sched_min_granularity_ns 。 据我了解越来越多的vm.dirty_ratio增加到40%将意味着对于一个20GB内存的服务器,除非vm.dirty_writeback_centisecs被命中,否则8GB在任何时候都可能是脏的。 而在刷新这些8GB的应用程序的所有IO将被阻塞,直到脏页被释放。 增加dirty_ratio可能意味着更高的写入性能达到峰值,因为我们现在有更大的caching,但是当caching填充IO时将会被阻塞相当长的时间(几秒)。 另一个是为什么他们增加了sched_min_granularity_ns 。 如果我理解正确,增加这个值会减less每个时期的时间片数量( sched_latency_ns ),这意味着运行的任务将会有更多的时间来完成他们的工作。 我可以理解这对于线程很less的应用程序来说是一件好事,但对于例如。 Apache或其他进程有很multithreading会不会适得其反?
我正在通过SMB备份一个Linux机器到NAS。 我在本地安装NAS,然后我rsync了很多数据(100GB左右)。 我相信这需要很长时间:超过12小时。 一旦一切都被复制,我预计会更快,因为几乎每天都没有改变。 有没有办法加快速度? 我在想也许rsync认为它与本地硬盘工作,并使用校验而不是时间/大小比较? 但我没有find强制进行时间和date比较的方法。 还有什么我可以检查?
我有一个Redmine实例(Bitnami Stack),速度非常慢。 因为我只是想深究其中,所以我想在这里讨论一些理论。 所以,如果有人对此有任何想法,请随时提供帮助:-) 系统: Bitnami堆栈与Redmine 1.4.x升级到Bitnami堆栈与Redmine 2.1.0是这样的: mysqldump'd旧数据库 用Redmine 2.1.0安装了新的Bitnami堆栈 干净地导入转储与重新创build所有表 耙db:迁移和所有 该堆栈正在使用OpenSUSE 12.1的虚拟机上运行。 资源不应该是一个问题,因为总是有几千GB的空闲内存,Redmine请求上的CPU峰值只能达到2个cpu核心的50%。 也只有很less的用户访问它。 什么可能是非常重要的:用户login是通过LDAP(ActiveDirectory)处理的。 问题: 在每个请求Redmine反应exception缓慢。 有时需要3秒钟,有时甚至需要10秒才能发送页面。 我的想法: 我不知道是否在Redmine的LDAP设置中选中了“即时创build用户”,我今天晚些时候才能检查这个。 但是,这里可能缺less支票是一个问题吗? 身份validation需要一些时间,login时是正常的,并确认。 但是,如果不是即时创build用户,是仅保留一个会话还是对每个请求重新进行身份validation,这可能是问题所在? Redmine 2.x可能比1.4.x慢得多,这只是普通的? Bitnami的Apache2 + Passengerconfiguration有问题吗? MySQL的索引不会是一个问题,因为MySQL对CPU非常冷静,是吗? 还有一件事对我来说似乎很奇怪,但可能是一个错误的测量结果(当我看到机器时,需要重新检查这个): 我试图检查是否是一个networking问题(networking反应慢,也许DNS或什么;服务器在本地networking)。 似乎本地主机上的请求(直接在OpenSUSE VM上的浏览器)很快,但通过networking的请求不是。 通常我会想到一个networking问题,但奇怪的是:当实际测量连接时间时,networking速度如此之快。 平安好,静态交货时间也是。 似乎只有Redmine方计算的页面被应用程序服务器缓慢发送,而Apache仍然很快 – 但只有当请求是远程局域网请求时。 很奇怪,但正如我上面提到的,我必须重新检查这一个。 这对我来说似乎不合逻辑。
在我的研究小组中,我们最近将我们的机器上的操作系统从Red Hat 6.2升级到了Debian 8.3,并且观察到我们机器之间通过集成的Intel 1G NIC的TCP往返时间从110μs增加到220μs。 起初,我认为这是一个configuration问题,所以我将所有的sysctlconfiguration(例如tcp_low_latency=1 )从未升级的Red Hat机器复制到Debian机器,并没有解决问题。 接下来,我认为这可能是一个Linux分发问题,并在机器上安装了Red Hat 7.2,但往返时间保持在220μs左右。 最后,我认为可能是Linux内核版本问题,因为Debian 8.3和Red Hat 7.2都使用内核3.x,而Red Hat 6.2使用内核2.6。 所以为了testing这个,我安装了Debian 6.0 Linux内核2.6和宾果! 时间又在110微秒。 其他人也在最新版本的Linux中经历了这些更高的延迟,并且有已知的解决方法吗? 最小工作示例 下面是一个C ++应用程序,可用于基准延迟。 它通过发送消息,等待响应,然后发送下一个消息来测量延迟。 它用100字节的消息完成了这个100,000次。 因此,我们可以将客户的执行时间除以100,000来获得往返延迟。 要使用这个首先编译程序: g++ -o socketpingpong -O3 -std=c++0x Server.cpp 接下来在主机上运行应用程序的服务器端版本(比如192.168.0.101)。 我们指定IP以确保我们在一个知名的界面上托pipe。 socketpingpong 192.168.0.101 然后使用Unix工具time来测量客户端的执行时间。 time socketpingpong 192.168.0.101 client 在两个具有相同硬件的Debian 8.3主机之间运行这个实验会得出以下结果。 real 0m22.743s user 0m0.124s sys 0m1.992s Debian 6.0的结果是 […]
任何人都可以推荐一个好的IPSec软件, 可以使用多个CPU核心来达到在Linux双核四核E5620 Xeon设置(总共16个HT核心)上〜2Gbps的性能? 我曾尝试过OpenSwan和StrongSwan。 OpenSwan KLIPS堆栈只能在单个CPU内核上运行。 而且KLIPS + OCFencryption卸载也似乎执行得非常糟糕,因为它只消耗70%的全部16个CPU核心,而只能提供〜600Mbps。 作为副产品,它也是对TCP数据包进行重新sorting。 到目前为止,使用不同协议的OpenVPN ,我们能够在负载平衡的同一硬件上达到〜2Gbps,没有任何问题。 在16个核心中只有4个以100%被利用。 现在是时候用Ipsec做同样的事情了。 最好应该是OpenSource IPsec解决scheme。 更新: 我的最新发现表明,IPsec NETKEY堆栈可能能够处理两个通信stream量而不会出现问题(但只能在Multiqueue NIC上)。 我无法确认这一点,因为看起来NAPI在高负载下将NIC驱动程序切换到轮询模式,那时所有性能从1.7 Gbps下降到500 Mbps。 另外看来,Ubuntu 10.04并没有考虑到一些内核线程,因此我没有看到如何在所有CPU内核上分配工作负载。
我们使用sys.dm_exec_query_stats来追踪缓慢的查询和查询,这些是IO违规者。 这很好,我们得到了很多非常有见地的数据。 很明显,这并不像运行一个profiler跟踪那样准确,因为你不知道SQL Server何时决定执行一个执行计划。 我们有很多查询错误的执行计划被caching。 例如下面的查询: selectTOP 30 援助 FROMposta JOINpostq ON q.Id = a.ParentId JOIN PostTags pt ON q.Id = pt.PostId WHERE a.PostTypeId = 2 AND a.DeletionDate IS NULL AND a.CommunityOwnedDate IS NULL AND a.CreationDate> @date 和LEN(a.Body)> 300 AND pt.Tag = @tag AND a.Sore> 0 ORDER BY aCore DESC 问题是理想的计划真的取决于所选的date(理想计划的截图): 但是,如果错误的计划被caching,当date范围很大时,它会完全窒息:(注意大胖子) 为了克服这个问题,我们build议使用OPTION (OPTIMIZE FOR […]
我在networking设置中见证了非常直观的效果。 我有一个连接到千兆以太网交换机的三个设备(我们称之为服务器 , 笔记本电脑和nettop ,所有运行Linux,细节如下)的networking设置。 我测量networking吞吐量(a)通过使用scp将文件从服务器传输到笔记本电脑 ;(b)使用服务器上的iperf -s和笔记本电脑上的iperf -c 。 当所有三个设备启动并运行时,当我执行吞吐量testing时,我会得到大约40 MB / s(SSH)或280 Mbits / s(iperf)的ok-ish性能。 但是,一旦我关掉了完全不涉及测量过程的networking ,我就得到大约3.5 MB / s(SSH)或者58 Mbits / s(iperf)的糟糕performance。 如果反过来 ,我会试图找出上网是否干涉转移。 但是当我把它关掉的时候,性能下降了一个数量级,这让我感到困惑。 这种行为是完全可重复的。 一旦上网得到了响应,性能立即上升。 一旦closures,性能下降。 我尝试在交换机上切断电源一分钟,然后在交换机上的以太网端口周围洗牌,没有任何效果。 所以我的问题是:什么可能导致我目睹的效果? 为了缩小问题的原因,我在哪里看? 有关安装的详细信息 上网机 富士康nT-330i,英特尔凌动330 内置Atheros AR8131千兆以太网控制器 Ubuntu 10.04(lucid),kernel 2.6.32-29,amd64 笔记本电脑 Thinkpad R61,Intel Core 2 Duo T8300 内置Broadcom BCM5787M千兆以太网控制器 Ubuntu 11.10(oneiric),内核3.0.0-16,amd64 服务器 AMD […]
我在2008 R2 Enterprise SP1上遇到一个奇怪的性能问题。 这是设置: 许多进程侦听绑定在单个NIC上的不同组播UDPstream(5个多播按进程侦听) 在整个过程中,所有组播使用相同的端口范围,但不同的组播IP(重要的细节,因为给定端口的每个组播接收器将是REUSED服务器套接字的服务器) 每个进程多播监听带宽为10Mbits 在NIC上设置RSS,在NIC&OS上设置最大卸载设置,激活MSI 行为: 在17个监听进程(大约85个joinUDP多播)中,内核CPU的影响是可以忽略的。 在17和22个监听器之间(大约110个joinUDP多播),内核CPU使用率开始缓慢增长,但是可以接受的 在25以上,每个join的组播开始对内核CPU时间产生巨大影响,这会影响所有RSS绑定的CPU 每个侦听进程使用的CPU时间接近0(正常,因为进程只会读取多播),所以真正的问题在于操作系统组件 我们发现: 更改NIC硬件对行为没有影响(在基于Broadcom NIC和HP NC365T,基于Intel千兆位的HP NC382i上进行testing) 全局接收带宽不是限制因素(单个500Mbitsstream不会触发CPU负载) 阅读组播套接字似乎不是限制因素(我们进行了testing,只是在组播stream上进行testing,只处理了组播stream,并再现了CPU负载问题) 在两个NIC上拆分多点传送stream量似乎可以更好地限制CPU负载和传播。 但是,这不是我们的用例。 问题: 我们至less需要能够监听大约500个组播stream,最多可以达到750个 相同的硬件,运行XP操作系统在CPU内核时间没有这种行为 被推荐的组件: NDIS.sys似乎是解释CPU使用率增加的一个很好的候选人。 你们有没有遇到这样的问题,可以给一些方向去调查。 我已经阅读了所有关于win server 2008networkingperf增强function的信息,但都似乎与TCPstream量有关。 我还testing了可以通过registry或netsh命令完成的所有可能的优化。
我有一个沉重的postgres查询。 这需要十多分钟的时间。 我想升级我的硬件,让它运行得更快。 我认为更多的内存将有所帮助,但是我的主板已经满了,所以我需要一个全新的主板。 除非我知道我会得到更好的结果,否则我不想投资。 以下是我在iotop中看到的内容: 总磁盘读取:46.81 M / s | 总的磁盘写入:0.00 B / s TID PRIO用户磁盘读取磁盘写入SWAPIN IO> COMMAND 27根/ 4根0.00 B / s 0.00 B / s 0.00%99.99%[kswapd0] 2514 be / 4 postgres 46.81 M / s 2.45 M / s 0.00%18.36%postgres:postgres db1 127.0.0.1(55328)SELECT 1根/ 4根0.00 B / s 0.00 B / s 0.00%0.00%初始 […]