[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