前提:以下优化是在以下部署环境下操作的!

阿里云轻量应用服务器配置:香港节点、1核CPU、1G内存
系统:CentOS 7.9.2009(Py3.7.9)
面板:宝塔面板(Bt-Panel)
MySQL版本:5.6

一、问题描述

重启服务器后,从宝塔面板(Bt-Panel)的首页看到内存占比高达70%以上,虽然附在状态显示运行流畅,但是不是全绿状态看着非常难受!

二、优化建议

(一)准备工作:查看内存占用高的应用

在宝塔面板(Bt-Panel)左侧“终端”选项卡,用root账户使用命令top查看,按Shift+M进行排序。

阿里云轻量应用服务器1G内存占用高如何优化1.jpg

(二)MySQL占用了大量内存怎么办

优化MySQL的配置步骤:
1、点击宝塔面板(Bt-Panel)左侧“软件商店”选项卡
2、找到已安装的MySQL软件,点击“设置”
3、点击MySQL管理左侧的“性能调整”,进行如下调整:
innodb_buffer_pool_size = 64M (Innodb缓冲区大小)
innodb_log_buffer_size = 8M(Innodb日志缓冲区大小)
thread_cache_size = 32(线程池大小)
max_connections = 32(最大连接数)
4、点击MySQL管理左侧的“配置修改”,找到“[mysqld]”,在下面加一句:

performance_schema = off

5、重启MySQL服务

阿里云轻量应用服务器1G内存占用高如何优化2.jpg

(三)sleeping进程过多怎么办

使用ps aux --sort=-rss命令按内存降序排列查看进程情况,然后根据COMMAND信息逐一排查,删除用不上的应用。

三、扩展阅读

(一)Linux中top命令详解

第一行:任务队列信息

top - 09:23:40 (当前时间)
up 1 day, 15:00, (系统开机到现在的运行时长,单位:分)
1 user, (当前登录用户数)
load average: 0.09, 0.07, 0.05 (系统平均负载,三个数值分别为 1分钟、5分钟、15分钟)

第二、三行:CPU信息
Tasks: 117 total, (进程总数)1 running, (正在运行的进程数)116 sleeping, (睡眠的进程数)0 stopped, (停止的进程数)0 zombie (僵尸进程数)
%Cpu(s): 1.2 us, (用户空间占用CPU百分比) 0.2 sy, (内核空间占用CPU百分比)0.0 ni, (用户进程空间内改变过优先级的进程占用CPU百分比) 98.7 id, (空闲CPU百分比) 0.0 wa, (等待输入输出的CPU时间百分比) 0.0 hi, 0.0 si, 0.0 st

最后两行:内存信息
KiB Mem : 951656 total, (物理内存总量) 113784 free, (空闲内存总量) 591620 used, (使用的物理内存总量) 246252 buff/cache(用作内核缓存的内存量)
KiB Swap: 2099196 total, (交换区总量) 2099196 free, (空闲交换区总量) 0 used. (使用的交换区总量) 223604 avail Mem(缓冲的交换区总量)

进程信息区统计信息区域各列含义:
PID 进程id
USER 进程所有者的用户名
PR 优先级
NI nice值。负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR 共享内存大小,单位kb
S 进程状态。D=不可中断的睡眠状态;R=运行;S=睡眠;T=跟踪/停止;Z=僵尸进程;
%CPU CPU上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行

其他
按 q 退出 top 交互界面。
按 u 输入用户名,查看特定用户的所有线程。
按 k 输入想kill掉线程的pid,可以杀掉对应线程。

(二)Linux中ps命令详解

ps是在Linux中是查看进程的命令。ps查看正处于Running的进程,ps aux查看所有的进程。
按内存降序排列:ps aux --sort=-rss
按cpu降序排列:ps aux --sort=-%cpu