major / MySQLTuner-perl

MySQLTuner is a script written in Perl that will assist you with your MySQL configuration and make recommendations for increased performance and stability.
GNU General Public License v3.0
8.88k stars 1.28k forks source link

Fix wrong physical memory #780

Closed vlatan closed 3 months ago

vlatan commented 5 months ago

Closes #779

The variable $physical_memory is correctly assigned from forcemem and converted to bytes early in sub os_setup (line 523).

$physical_memory = $opt{'forcemem'} * 1048576;

But then on line 598 it is reassigned (overwritten) from a forcemem value, if existing, without converting it to bytes.

$physical_memory=$opt{forcemem} if (defined($opt{forcemem}) and $opt{forcemem} gt 0);

This leads to a problem when converted/rounded back to KB, MB or GB in hr_bytes. Now because of the reassignment $physical_memory has the MB value, but hr_bytes treats that value as bytes.

$result{'OS'}{'Physical Memory'}{'pretty'} = hr_bytes($physical_memory);

This will lead to incorrectly determining the Physical memory. For example if a user passes --forcemem 2000, the hr_bytes will convert that to 2.0K, thinking 2000 is bytes, and the result in the console will be:

[--] Physical Memory: 2.0K

And ultimately because of this, mysqltuner will give wrong suggestions about the memory consumption:

*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
jmrenouard commented 3 months ago

Thanks @vlatan