如何解决 mysql 线程堆栈溢出?

Posted

技术标签:

【中文标题】如何解决 mysql 线程堆栈溢出?【英文标题】:How do I resolve a mysql Thread Stack Overrun? 【发布时间】:2012-05-09 17:48:25 【问题描述】:

我在 mysql 上有一个存储过程。它在我的本地 MAMP 环境中运行,该过程运行良好,但是当我将其移动到 linode 服务器/主机时,它无法运行。我收到“线程堆栈溢出”错误。我尝试将线程堆栈从初始值 64K 向上提升。我将值更改为 128K,然后更改为 256K。但问题仍然存在。

我正在开发一个 Lucid ubuntu 512MB linode 服务器。我在我的 mysql/my.cnf 文件中运行 linode 的建议配置:

key_buffer = 16K
max_allowed_packet = 1M
thread_stack = 64K 
table_cache = 4
sort_buffer = 64K
net_buffer_length = 2K

有人可以帮忙吗?你能推荐不同的配置吗?

【问题讨论】:

【参考方案1】:

如果您使用的是 Ubuntu 14.04,您可以在此处增加您的 MySQL 线程堆栈:

/etc/mysql/my.cnf

并更改此值thread_stack,它可能具有这样的值,例如:

thread_stack = 192K

之后你需要像这样重启 MySQL:

sudo service mysql restart

请参阅Ubuntu 14.04, MySQL documentation 了解更多信息。

【讨论】:

在 Ubuntu-16.04.3 中,文件位置和名称已更改。我必须运行 sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf 来更改 thread_stack 的值。 另外,在 Ubuntu 16.04 上重启 MySQL:sudo systemctl restart mysql.service 我的 my.cnf 中已经有了这个,但是值太低了。将其设置为 192 已修复,因此感谢您的指导!【参考方案2】:

我是个白痴。我将 thread_stack 重置为更高的数字,但我没有重新启动服务器。重新启动解决了问题。

【讨论】:

以上是关于如何解决 mysql 线程堆栈溢出?的主要内容,如果未能解决你的问题,请参考以下文章

怎么解决 LINUX 堆栈溢出内存的问题

怎么防止堆栈溢出

如何在 C++ 中处理或避免堆栈溢出

如何解决递归调用中的堆栈溢出错误?

函数 堆栈溢出

构造大树时“线程'<main>'已溢出其堆栈”