按计划重新启动服务器是否可以提高性能?


14

我想知道按时间表重新启动服务器是否对提高性能是个好主意。

假设我们要每2晚02:00 AM重新启动服务器。

这里的服务器是Windows Server 2008 R2。主要是,SQL Server和IIS 7.5(正在运行近15个应用程序)在此服务器下运行。服务器有4GB内存。


9
您实际上有性能问题吗?Windows 可以运行数年而无需重新引导。它不应该去那么久而不需要重启系统,只是因为补丁需要安装的,但它肯定可以的。我个人有一个服务器在一个完全隔离的网络,已经运行了<检查> 489天。它仍然可以正常工作并且性能可以接受。
Ben Pilbrow

6
我假设在内存或CPU数量有限的情况下会这样做。-您假设错误。
罗伯·摩尔

4
对此文章投反对票的人应解释原因。这是一个很好解释的问题,对此没有错。
tugberk 2011年

17
正确的做法是解决问题的原因,而不仅仅是重新启动它。定期重新启动的计算机称为台式机。
巴特·

4
他们可能会投票反对,因为有些问题也不是一个好主意。虽然目前还没有想到一个例子。原因很多。人们很奇怪。我们依靠一般常识来克服拙劣的判断。这就是为什么它是社区Q / A网站。
Bart Silverstrim

Answers:


32

虽然我同意重新启动该框本身没有任何问题,但根据您对SQL Server代理正在停止的评论,我建议进行一些其他根本原因分析。根据我的经验,服务通常不会只是停止,并且SQL Server代理服务通常不会采取这种方式。

我认为除了重新启动之外,您还可以检查事件日志并运行长期性能计数器日志,然后可以使用性能分析日志(PAL)进行分析,以查看是否“看到”了任何错误。如果没有其他问题,您应该尝试将与SQL Agent关联的事件与其他因素相关联。


2
“加”?解析第2行的错误
。– Tomas

@tugberk-如果这是答案,那么在Evan建议您进行分析后,SQL Agent停止的原因是什么?
8

@fluffy:嘿!很高兴在这里见到你!我不知道你曾经知道我的“真实姓名”。我是2003年-2005年的老歌迷。想想糟糕的合成器流行乐和一个“乐队”的名字,它唤起了人们对垃圾场的看法,您可能还记得。
埃文·安德森

好吧,这很离题!您好调节器。;)(这当然应该通过电子邮件发送,但我找不到您的地址。)
蓬松的

38

如果您想重启计算机以提高性能,则可能意味着您最终会遇到内存管理问题。

缓存很好

如果有的话,在更理想的环境中重新启动服务器会损害性能(当然还有正常运行时间)。计算性能的基本原理之一是利用缓存(在快速内存中具有可用数据)。每次重新启动时,都会耗尽缓存。SQL Server和IIS都是如此。尽管您可能没有理想的环境,但是与按计划重新启动服务器相比,以下内容应该可以帮助您选择一个更好的选择。

IIS内存泄漏?

现在您提到这是IIS 7.5。尽管我发现它令人沮丧,但是在IIS 7.5上运行的许多Web应用程序都有内存泄漏,IIS中的默认设置是每X分钟重新启动一次APP,如果APP池处于空闲状态则将其关闭。理想的方法是修复内存泄漏-但是,如果不能,则可以调整这些设置,包括内存限制和计时器。您可以使用perfmon找出哪个w3wp进程正在使用内存。这有点麻烦,但是您可以将其与应用程序池绑定在一起%systemroot%\system32\inetsrv\APPCMD list wps

SQL内存

回到缓存,SQL将占用它可以使用的内存。您可以在SQL Server的属性中对此进行限制。如果您不限制内存,并且还在包装盒上运行IIS,则这些设备可能会开始争夺内存杀死性能。这篇出色的文章对此进行了详细介绍:《 Sysadmin的Microsoft SQL内存指南》

平衡

由于IIS和SQL都位于同一框上,因此必须平衡它们的内存使用量。如果您不这样做,则可能会再次将可能使用的内存换出到磁盘上-这是一个可怕的地方(应该有用于交换活动的perfmon计数器)。通过使用IIS回收设置和SQL内存限制,您应该能够使该系统稳定。为了平衡这一点,您可能需要4GB以上的内存。另外,如果可以选择的话,我强烈建议将SQL Server放在专用计算机上,这将使性能大大提高并大大简化工作。


令人惊讶的答案凯尔(Kyle),希望我在SBS2011与性能有关的问题上遇到这些问题之一!通过我自己的研究(数月),找到了您提到的每件事。仍然遇到问题,但这是另一回事。
HaydnWVN

12

我不支持按计划重新启动服务器,特别是不作为解决某些潜在问题的方法。如果您需要重新启动该服务器以解决性能问题,那么更好的解决方法是找到问题的原因并解决。定期重新启动服务器只会使根本问题难以解决。


5

如果您有大量内存泄漏,那么请确定,为什么不这样做-否则每月重新启动一次更新。


谢谢你的提示。我现在正在看任务管理器,看到该系统使用了75%的内存。
tugberk

6
如果运行的是SQL Server,那是可以预期的。SQL Server将尝试(并且应该让它使用)它可以使用的所有内存。
Ben Pilbrow

4
这并不意味着您有内存泄漏。有内存可以使用。重新启动以解决内存泄漏是一种非常实用的解决方法,但从长远来看,更好的解决方案是查找并修复导致它们的故障。
罗伯·摩尔

1
@tugberk:正如我在回答中所说,SQL Server Agent服务由于内存压力状况而停止运行并不是我的经验。大概有条件,但是我希望您到那时为止会看到其他服务的问题(因为这可能相当严重)。
埃文·安德森

2
我想,如果是内存的话,您应该会看到交换在“死亡”之前受到了严重的打击。内存将始终尽可能多地用于缓存等。您可能应该首先使用工具来分析数据库的使用情况。而且,如果您正在运行15个应用程序,并且内存不足(4个演出中有15个应用程序+数据库?这些东西有多大?),您可能应该已经在考虑将数据库组件从Web服务器分离到专用服务器。
巴特·

2

如果您真的想按计划重新启动服务器(由于上述内存泄漏或更新或任何其他原因)-为什么不查看群集解决方案?并行安装另一台服务器,将它们连接到负载均衡器(即使是简单的负载均衡器也可以),您可以根据需要重新启动它们,而不会浪费服务正常运行时间,也不必担心服务器根本无法启动,并且你会出去的。


1

这不是一个可怕的想法,但是如果只是“伏都教”,那可能对您没有太大帮助。

但是,有两个理由不让这成为提高性能的调查的终点。

一是未来的可扩展性。如果您的中断是负载,某些查询,遇到高速缓存,查询编译或btree索引错误的特定查询或当前每天发生的其他问题的结果,则它们可能会随着负载而更频繁地发生随着时间增加。将其压缩在萌芽状态。

另一个问题是,我怀疑您需要在重新启动期间停止从依赖服务传入的请求。您刚刚创建了操作节奏。每次需要运行一些日常任务时,最终任务都会与您的重新启动有关。在某个时候,您将需要花费六个小时进行这些大规模的滚动重启(我在这里并不夸张,我看到它发生在多家公司中),没有人会记得为什么需要在中间停止并重新启动一切的夜晚。

我的建议是监视SQL进程并根据需要重新启动。正如以前的海报所提到的,SQL并没有人们认为的那样的内存泄漏(我说这是90年代中期在MSSQL团队工作的人)。您希望数据库服务器使用几乎100%的内存和CPU。少浪费资源。


0

如果代码编写不正确且内存泄漏,则重新引导可能是将分配的内存返回到池中的唯一方法。如果您有受内存限制的进程,那么将池刷新到干净状态肯定可以提高性能。但这实际上是处理性能问题的一种不好的方法,应查明并修复实际原因。

否则,让它运行,直到需要维护窗口来应用补丁程序/应用程序/恢复数据。这可能是个好时机,建议性能工程师查看问题服务器,以确切地解释为什么/什么问题引起了这种情况。


0

虽然本身并不是一个完整的答案,但是向服务器添加更多RAM是否可行?对于IIS / SQL Server计算机,4GB有点低。根据它是实际专用的服务器单元还是投入使用的台式机,您可能能够以相当低的成本获得8GB或更多的存储空间。当然,如果它是一台服务器,它的价格可能会比标准台式机RAM高出一点,但在强制重启之间会给您更多的时间。

这么说,看看是否可以限制SQL Server使用最多80%的RAM,或者查看日志以精确找出问题所在和/或服务停止的原因。


0

如果您有Windows服务器,并且遵循任何类型的修补例程,则与SQL问题无关,您将定期重新启动服务器,而不必“仅因为”而重新启动。当我为“ BIG MULTINATIONAL”工作时,我们被要求每月打补丁,因此我们的所有服务器每月至少要重启一次。


0

我在3台服务器上执行此操作,其中1个是我们的客户,另外2个是客户。我已经出于各种原因对它进行了设置-一台服务器2008R1有许多等待安装的更新,但是我无法批量安装它们,因此,我每天都一一安装它;另一台服务器2012R2-用于引导故障排除和一些性能问题等。我认为从另一台服务器安排定期重新引导并不是一个坏习惯,它可以帮助跟踪各种硬件和软件问题,尤其是自动启动中涉及的问题。


-2

我知道一家大公司不仅会每晚重新启动其Windows服务器,而且其中一些甚至每24小时都会重新安装一次。对于他们来说,这是必需的,因为软件中存在内存泄漏和安全性问题。

似乎有些公司每24小时重启一次-尽管对于Linux管理员来说,这似乎很奇怪。明确说明:由于内存问题,我永远不建议这样做-找出问题并解决。

如果您的内存使用率在几个月内保持在75%的固定水平,则可能无需重新引导-服务器应用程序使用所有可用内存是完全正常的-它可以大大提高性能,因为如果使用,则需要更少的磁盘IO RAM来缓存您的数据。


谢谢@Subito。好吧,我实际上是一名Web开发人员(不是服务器管理员),但是当前我需要维护服务器。这就是为什么我要问这个简单的问题。我想你是对的。但令我震惊的是,有公司正在做这种事情。他们不从任何形式的服务器端兑现中受益吗?
tugberk

它们的所有应用程序都是自编写的,旨在与DOS或3.11一起使用。他们设法使数据库超出了该应用程序的范围,并以某种方式将其移植到Server2008。这仍然是一个奇迹。没有人会发疯,尝试更改所有内容以使用缓存。他们有几个人坐在那里,等待崩溃,然后重新启动应用程序/服务器/其他。
Subito

6
每隔24小时重新引导服务器,这不是“合法”的事情。他们要么遇到了一些非常极端的案例问题,要么他们的网络和服务器都由该行业中最大的白痴管理。
罗伯·摩尔

是的,它们的确是最大的傻瓜-但它不是我所知道的唯一一家使用Windows服务器来做到这一点的公司……这似乎是处理内存问题的一种非常普遍的方式。-不要误会我,我认为这是一个可怕的,可怕的错误,不进行调查和解决问题!
Subito

7
@Subito-在您的回答中,您说“似乎合法每24小时重新启动一次”,这只是个坏建议。您是在告诉OP,这是一个合法的主意,同时指的是一家您说的公司充满了愚蠢的软件。对我来说似乎合法。
MDMarra 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.