我最近开始了一个 PoC 项目,我们正在开发一个小型 Web 应用程序。初始设置是在 AWS 的微型实例上完成的。我们在 rails+mysql 堆栈上。
安装/运行 MySQL 后,我看到已经消耗了大约 500+ MB RAM;剩下的系统要少得多(微型实例只有 620 MB RAM)。
在这个阶段,我们的应用程序相当简单。我可以做些什么来减少 MySQL 服务器消耗的内存吗?
感谢帮助。
我最近开始了一个 PoC 项目,我们正在开发一个小型 Web 应用程序。初始设置是在 AWS 的微型实例上完成的。我们在 rails+mysql 堆栈上。
安装/运行 MySQL 后,我看到已经消耗了大约 500+ MB RAM;剩下的系统要少得多(微型实例只有 620 MB RAM)。
在这个阶段,我们的应用程序相当简单。我可以做些什么来减少 MySQL 服务器消耗的内存吗?
感谢帮助。
在您的/etc/my.cnf
文件中:
performance_schema = 0
并重新启动 MySQL。如果您以前启用它,这应该会大大减少内存使用量。
编辑:对于 5.7.8 和 8.0.1 之间的 MySQL 版本(从 8.0.1 开始不需要),以上内容不足以释放性能模式数据的内存:
从 MySQL 5.7.8 开始,即使禁用 Performance Schema,它也会继续填充 global_variables、session_variables、global_status 和 session_status 表。
(来源)
为了防止这种行为,show_compatibility_56
除了 . 之外,还设置为 1 performance_schema
。也就是说,您的 my.cnf 更改应如下所示:
performance_schema = 0
show_compatibility_56 = 1
在 MySQL 配置文件 (my.cnf) 中更改此设置
key_buffer = 8M
max_connections = 30 # Limit connections
query_cache_size = 8M # try 4m if not enough
query_cache_limit = 512K
thread_stack = 128K
只是添加到另一个答案。我最近在使用 Amazon 微型实例(不是 Ubuntu)时遇到了这个问题。my.cnf 文件几乎是空的,所以我所做的是:
cp /etc/my.cnf /etc/my.cnf.orig
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
编辑 my.cnf 并启用 innodb 行(如果适用)。重启mysqld。
微型实例也没有交换,这可能是个问题..
SWAPFILE=/mnt/swapfile.swap
dd if=/dev/zero of=$SWAPFILE bs=1M count=512
mkswap $SWAPFILE
swapon $SWAPFILE
然后在 /etc/rc.local 添加:
交换 /mnt/swapfile.swap
要在 ruby 中节省内存,您可能需要使用 ruby enterprise:
bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
gpasswd -a root rvm
source /etc/profile.d/rvm.sh
rvm get head
rvm reload
rvm install ree
rvm --default use ree
我有一台只有 500mb 内存的服务器,发现随着我的表变大,mysql 开始使用大量内存。在玩了一堆设置之后,对我来说减少内存使用的是将我所有的表都转换为 MyISAM。如果您不需要 innodb 将表转换为 MyISAM 的功能,会很有帮助。您可以像这样转换表格:
ALTER TABLE test.mytable ENGINE=MyISAM;
进行此更改后,我发现内存使用量减少了 20%。为了进一步减少内存使用,您可以将所有表转换为 MyISAM,然后完全关闭 mysql 中的 innodb 支持。这将我的内存使用量减少了 50%。
您可以通过添加:
[mysqld]
default_storage_engine=myisam
innodb=OFF
然后重启mysql。
配置交换文件 sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo cp /etc/fstab /etc/fstab.bak sudo nano /etc/fstab
在末尾添加以下行,保存并关闭: /swapfile swap swap defaults 0 0
sudo sysctl vm.swappiness=10 sudo vi /etc/sysctl.conf
在末尾添加以下行,保存并关闭:vm.swappiness=10
配置 PHP sudo nano /opt/bitnami/php/etc/memory.conf
; Bitnami memory configuration for PHP-FPM
;
; Note: This will be modified on server size changes
pm.max_children=10
pm.start_servers=2
pm.min_spare_servers=2
pm.max_spare_servers=10
pm.max_requests=5000
配置 MariaDB (MySQL) sudo nano /opt/bitnami/mariadb/conf/bitnami/memory.conf
[mysqld]
#wait_timeout = 120
long_query_time = 1
query_cache_limit=2M
query_cache_type=1
query_cache_size=8M
innodb_buffer_pool_size=16M
#innodb_log_file_size=128M
#innodb_flush_method=O_DIRECT
tmp_table_size=16M
max_connections = 100
max_user_connections = 250
key_buffer_size=8M
sudo /opt/bitnami/ctlscript.sh 重启