我最多只能算是一个初级系统管理员,我已经运行我的 AWS ec2 实例很长时间了,没有发生过任何意外。它主要为我的 iOS 和 Web 应用程序及其 Web 连接提供支持。
最近我不得不更新我使用的 iOS Web 服务框架,而更新上线后,我的服务器就一直出现故障。我可以通过 SSH 进入我的实例,但任何通过 iOS 服务器调用或 Web 访问的外部连接尝试都会无限加载。
我与 AWS 支持人员反复沟通,他们说我的 NetworkIn 看起来有点高。我目前的解决方案是,当它出现故障时,重新启动服务器,它通常会恢复一段时间,但最近几天,由于新年的到来,我的流量急剧上升,重新启动后,它最多只能保持一分钟的可访问性。
我将 MaxRequestWorkers 从 150 增加到 250,到目前为止,这是唯一能让我的服务器保持可访问性的方法。我刚刚这样做了,到目前为止,它已经保持活动状态约 30 分钟,没有发生任何事故。
我不确定根本原因是什么,甚至不知道去哪里寻找解决方案或雇人来尝试帮助我解决它。
任何正确的方向都将不胜感激,如果你需要更多信息,请告诉我
答案1
您的问题没有单一的方法。这可能是 DoS 或只是配置错误。这可能是与 Apache 相关的任何内容(或不相关)。
我可以说说我通常会做什么:
这真的是 Apache 的主要原因吗? 正如您刚才所说的网络流量(不是专门针对 Web 的),只需使用
top
或之类的软件htop
(我更喜欢)仔细检查即可。您将获得一个进程列表,您可以根据不同的标准对其进行排序。您还可以查看系统中哪些部分最繁忙(CPU、内存等)。好的,这是 Apache,但是:是什么导致了资源使用量的峰值?
- 访问日志:查看访问日志(
/var/log/apache2/access.log
如果有Ubuntu
)。例如,是否有大量带有奇怪请求的错误代码?403 - Forbidden
,404 - Not found
。如果是这样,您可能受到自动化工具的攻击。这是一个非常笼统的解释(我想强调这一点),但一段时间后,您将能够从日志中理解它(查看从 Apache 日志中识别 DDoS例如 - 日志:除了尝试跟踪日志流之外,还可以尝试使用为此构建的工具对其进行分析。我喜欢
GoAccess
。这是一个非常简单而强大的工具,可以扫描您的Apache
日志并生成一些有用的统计数据(这里有很好的解释GoAccess 网页 - Apache 统计数据:您可以使用
mod_status
。这是一个Apache
为您创建有关您的网络服务器的一些统计信息的模块。您可以访问这些统计数据,连接到网页并查阅它(这是对其用法的一个很好的解释mod_status 教程 - 其他原因:资源真的很忙吗?或者您只是有许多
Apache
进程在等待答案,例如DB
?在大多数情况下,DB
是 Web 架构的瓶颈。也许是超载了,无法及时响应请求,因为例如,您在特定表上有一个阻塞查询。尝试使用检查它netstat -atulnp | grep apache
,查看目标和所有请求的状态
- 访问日志:查看访问日志(
这实际上是一份要完成的无限任务的列表。这些是开始的任务(恕我直言)。如果您发布更详细的信息,我可以更具体地说明您的情况。