专注是一种工匠精神

宝塔负载状态100%的原因及解决方法

文章目录

发现到服务器的 CPU usage 在不到50%,也就是CPU 没有满载,内存 usage 也还有剩余的情况之下,宝塔面板所显示的负载状态却100%甚至超过(状态最多是显示100%),这时候网站效率可能会受到影响,原因是因为磁盘 IO 的负载可能已经超过原有的负荷,所以宝塔负载状态这时候可能会保持在100%。

 

可能原因

以下列几种可能性因素:

网站日志

有些网站或程序在功能上面有自带日志写入功能,假设今天你使用的是站群程序,那么你很有可能会遇到负载状态100%的情况,而且会影响到站群网站的访问,甚至会出现 502。

数据库日志

如果你有使用定时脚本与数据库互动的情况下,也有可能增加负载状况,数据库有 bin 日志、慢日志、错误日志等多种log,服务器的磁盘若不是固态硬盘而是HDD,在大量网站运行之下,会有负载状态大幅提升的可能性。

防火墙插件日志

这也是其中原因之一,因为插件本身也是在服务器底下运行,因此插件上面的所有数据内容,只要你看的到的东西,都是经过代码而写入的日志,这些都会增加磁盘IO的负载。

监控报表日志

这个跟防火墙插件的道理是一样的,当你运行大量网站,监控插件就会开始记录你所有网站的”所有情况”,而插件要记录你所有情况就得写入大量的信息到文档里面。

 

解决方法

打开ssh,键入以下指令:

iostat -x 1 10

将feedback 传给 chatgpt 请它分析情况,注意一点,chatgpt 所有的回答并不一定会符合你服务器的需求,所以在修改一些核心配置的时候,建议逐步进行。

打开 my.cnf(Linux) 或 my.ini(Windows)

[mysqld]
innodb_buffer_pool_size = 4G
innodb_log_file_size = 512M
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_lru_scan_depth = 1024

 

innodb_log_file_size 建议在 256M 至 1024M 的范围之间。

innodb_buffer_pool_size 从4G开始逐步增加,若发现数据库错误日志很多,每次增加1G至2G,错误日志大致上是长这样:

2024-07-16T22:22:17.570995Z 0 [Note] InnoDB: page_cleaner: 1000ms intended loop took 13913ms. The settings might not be optimal. (flushed=150 and evicted=0, during the time.)

innodb_io_capacity 可以控制数据库的磁盘IO操作

innodb_flush_method = O_DIRECT 设置这个是为了避免重复缓存

innodb_flush_log_at_trx_commit 这个参数是优化innodb日志写入的策略,1 表示日志持久性高但效能差, 2 表示innodb递交立即写入日志,在递交时不执行实际IO,0 表示innodb每秒将缓冲日志更新到硬盘,算是效能最好的。这三种策略取决于自己目前服务器状态可以应用哪种策略,因为本文章聚焦的是硬盘IO负载问题,因此设定为2。

请注意一件事情,你看不到的地方如果也在记录某些东西,那你就要小心,因为你不知道你哪个地方被写入了多少东西进去,这时候你可以观察你的硬盘容量的变化是否有异常增加。

其他的,改天再更新。

赞(0)
未经允许不得转载:伦客网 » 宝塔负载状态100%的原因及解决方法

评论 抢沙发

3 + 8 =