服务器负载过大

[root@controller ~]# top
top - 09:48:55 up 1 day, 19:27,  1 user,  load average: 59.06, 58.21, 53.75
Tasks: 187 total,   5 running, 178 sleeping,   0 stopped,   4 zombie
%Cpu(s):  1.2 us, 24.5 sy,  0.0 ni,  0.0 id, 73.4 wa,  0.0 hi,  0.8 si,  0.0 st
KiB Mem :  1882148 total,    77296 free,  1730440 used,    74412 buff/cache
KiB Swap:        0 total,        0 free,        0 used.    39156 avail Mem 
Which user (blank for all) 
Broadcast message from root@controller (Fri 2020-11-06 09:53:23 CST):MMAND                                                        
   30 root      20   0       0      0      0 S 60.4  0.0 342:50.11 kswapd0                                                        
The system is going down for power-off NOW!0 S  2.6  0.0  22:38.34 kworker/0:1H                                                   
27626 mysql     20   0 1171328  97492      0 S  1.8  5.2  16:54.50 mysqld                                                         
27552 root      20   0  774708  10764    416 S  1.2  0.6   0:12.68 barad_agent                                                    
Socket error Event: 32 Error: 10053.6      0 S  1.0  1.0  14:23.64 YDService                                                      
Connection closing...Socket close.744   2384 R  1.0  0.1   0:00.98 systemd-journal                                                
 1064 mysql     20   0 1313688  75652      0 S  0.9  4.0   4:10.19 mysqld                                                         
Connection closed by foreign host.828     12 S  0.7  6.5   0:11.07 celery                                                         
28866 root      20   0  134804  17264    616 R  0.7  0.9   0:01.07 celery                                                         
 1641 root      20   0  642068  11912   7968 D  0.6  0.6   6:43.78 YDEdr                                                          
27803 root      20   0  441724  99204    520 S  0.5  5.3   2:54.32 daphne                                                         
27872 root      20   0  131388   3168      0 S  0.5  0.2   7:01.13 koko                                                           
Disconnected from remote host(腾讯云) at 09:54:46.5  0.0   0:00.08 trystart.sh                                                    
29158 root      20   0       0      0      0 Z  0.5  0.0   0:00.06 gunicorn                                                       
Type `help' to learn how to use Xshell prompt.  0.5  0.0   0:00.06 gunicorn    

主机卡死,查看原因:60.4 0.0 342:50.11 kswapd0这个进程占用了60%的cpu的使用量
<发现kswapd0进程cpu占用一直居高不下,于是查询资料,总结如下。

swap分区的作用是当物理内存不足时,会将一部分硬盘当做虚拟内存来使用。

kswapd0 占用过高是因为 物理内存不足,使用swap分区与内存换页操作交换数据,导致CPU占用过高。

   可以通过修改  /etc/sys/vm/swappiness  里面的数值来修改swap分区使用与否,默认 60,数值越大表示更多的使用swap分区。这个交换参数控制内核从物理内存移出进程,移到交换空间。该参数从0到100,当该参数=0,表示只要有可能就尽力避免交换进程移出物理内存;该参数=100,这告诉内核疯狂的将数据移出物理内存移到swap缓存中。设置vm.swappiness=0 后并不代表禁用swap分区,只是告诉内核,能少用到swap分区就尽量少用到,设置vm.swappiness=100的话,则表示尽量使用swap分区。

Swap配置对性能的影响
分配太多的Swap空间会浪费磁盘空间,而Swap空间太少,则系统会发生错误。如果系统的物理内存用光了,系统就会跑得很慢,但仍能运行;如果Swap空间用光了,那么系统就会发生错误。例如,Web服务器能根据不同的请求数量衍生出多个服务进程(或线程),如果Swap空间用完,则服务进程无法启动,通常会出现“application is out of memory”的错误,严重时会造成服务进程的死锁。因此Swap空间的分配是很重要的。
通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存的2-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,一般来说对于4G 以下的物理内存,配置2倍的swap,4G 以上配置1倍。
另外,Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。

总结完了继续正题:

查看/proc/sys/vm/swappiness,vm.swappiness=0已经是能少用到swap分区就尽量少用到分区了
先把堆内存设置小点把程序启动起来,频繁触发GC,没办法只能升级内存了。

java 
-Xms128m #JVM启动时的初始堆大小 
-Xmx128m #最大堆大小 
 -jar app.jar

猜你喜欢

转载自blog.csdn.net/qq_26884501/article/details/109526137
今日推荐