39

我最近开始了一个 PoC 项目,我们正在开发一个小型 Web 应用程序。初始设置是在 AWS 的微型实例上完成的。我们在 rails+mysql 堆栈上。

安装/运行 MySQL 后,我看到已经消耗了大约 500+ MB RAM;剩下的系统要少得多(微型实例只有 620 MB RAM)。

在这个阶段,我们的应用程序相当简单。我可以做些什么来减少 MySQL 服务器消耗的内存吗?

感谢帮助。

4

5 回答 5

106

在您的/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
于 2013-10-01T12:25:11.817 回答
42

在 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
于 2012-05-20T20:31:15.403 回答
2

只是添加到另一个答案。我最近在使用 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
于 2012-05-20T20:39:49.267 回答
1

我有一台只有 500mb 内存的服务器,发现随着我的表变大,mysql 开始使用大量内存。在玩了一堆设置之后,对我来说减少内存使用的是将我所有的表都转换为 MyISAM。如果您不需要 innodb 将表转换为 MyISAM 的功能,会很有帮助。您可以像这样转换表格:

ALTER TABLE test.mytable ENGINE=MyISAM;

进行此更改后,我发现内存使用量减少了 20%。为了进一步减少内存使用,您可以将所有表转换为 MyISAM,然后完全关闭 mysql 中的 innodb 支持。这将我的内存使用量减少了 50%。

您可以通过添加:

[mysqld]
default_storage_engine=myisam
innodb=OFF

然后重启mysql。

于 2016-12-28T19:03:14.820 回答
0

配置交换文件
 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 重启

于 2022-03-04T08:44:47.427 回答