내 메모리를 사용하는 것이 무엇인지 알고 싶습니다. 좀 확인해 봤는데 이렇게 나오네요mysqld결과적으로 RAM 사용량이 높아졌습니다. free -g
, htop
, 의 출력 top
은 showprocesslist;
별로 도움이 되지 않습니다.
자유 g
total used free shared buffers cached
Mem: 125 120 5 0 1 101
-/+ buffers/cache: 17 108
Swap: 0 0 0
내 말이 맞다면 125GB 중 사용 가능한 메모리가 5GB밖에 없다는 뜻입니다.
맨 위
1 [||| 4.6%] 9 [ 0.0%] 17 [|| 1.4%] 25 [ 0.0%]
2 [||||||||||||||||||||||| 44.4%] 10 [ 0.0%] 18 [ 0.0%] 26 [| 0.5%]
3 [||||||| 12.4%] 11 [| 0.5%] 19 [ 0.0%] 27 [ 0.0%]
4 [||||| 7.5%] 12 [ 0.0%] 20 [ 0.0%] 28 [ 0.0%]
5 [|||||||| 14.2%] 13 [ 0.0%] 21 [ 0.0%] 29 [ 0.0%]
6 [|||| 4.8%] 14 [ 0.0%] 22 [| 0.5%] 30 [ 0.0%]
7 [ 0.0%] 15 [| 0.5%] 23 [|| 2.4%] 31 [ 0.0%]
8 [| 0.5%] 16 [| 0.9%] 24 [|||| 5.6%] 32 [ 0.0%]
Mem[||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||17367/128886MB] Tasks: 93, 90 thr; 2 running
Swp[ 0/1021MB] Load average: 1.01 0.96 0.97
Uptime: 18 days, 05:43:05
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
27655 mysql 20 0 66.8G 6166M 11220 S 69.2 4.8 5:25.06 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
28300 mysql 20 0 66.8G 6166M 11220 R 33.4 4.8 0:51.03 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27743 mysql 20 0 66.8G 6166M 11220 S 35.8 4.8 1:26.46 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
28064 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 1:33.48 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
28007 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 1:27.01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27727 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.44 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27692 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27697 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.03 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27725 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.39 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27724 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.08 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27691 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27693 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.11 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27694 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.06 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27695 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.10 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27696 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.08 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27698 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.02 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27699 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27700 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27726 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
27739 mysql 20 0 66.8G 6166M 11220 S 0.0 4.8 0:00.00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysql
8395 clamav 20 0 799M 534M 24264 S 0.0 0.4 0:00.00 /usr/sbin/clamd --foreground=true
8266 clamav 20 0 799M 534M 24264 S 0.0 0.4 9:07.15 /usr/sbin/clamd --foreground=true
12977 amavis 20 0 316M 120M 8448 S 0.0 0.1 0:01.46 /usr/sbin/amavisd-new (ch10-avail)
8190 amavis 20 0 316M 120M 8448 S 0.0 0.1 0:01.64 /usr/sbin/amavisd-new (ch11-avail)
24641 amavis 20 0 242M 116M 5692 S 0.0 0.1 0:11.26 /usr/sbin/amavisd-new (master)
htop
출력은 다음과 같습니다mysqldRAM 사용량이 많아지죠?
맨 위
top - 18:12:15 up 18 days, 5:55, 1 user, load average: 0.98, 1.00, 1.00
Tasks: 475 total, 1 running, 474 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.7 us, 0.2 sy, 0.0 ni, 97.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 13198007+total, 12738310+used, 4596968 free, 1927068 buffers
KiB Swap: 1046520 total, 0 used, 1046520 free. 10698358+cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27655 mysql 20 0 66.840g 6.662g 11220 S 62.3 5.3 12:50.24 mysqld
22288 web1 20 0 367640 75964 52492 S 29.2 0.1 6:55.78 php-cgi
16897 www-data 20 0 2067372 28632 7380 S 1.0 0.0 7:20.03 apache2
29318 root 20 0 26512 3440 2576 R 0.7 0.0 0:01.49 top
31235 root 20 0 775232 12736 5984 S 0.3 0.0 16:57.05 fail2ban-server
1 root 20 0 177980 6764 3256 S 0.0 0.0 0:55.74 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.13 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:04.97 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 2:56.16 kworker/u64:0
8 root 20 0 0 0 0 S 0.0 0.0 16:31.60 rcu_sched
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
10 root rt 0 0 0 0 S 0.0 0.0 0:00.95 migration/0
그러나 이후에맨 위보여주다mysqld만 사용5.3%메모리.
프로세스 목록을 표시합니다.
Kill Kill 734 phpmyadmin localhost NULL Sleep 0 NULL
Kill Kill 735 root localhost NULL Query 0 NULL SHOW PROCESSLIST
프로세스 목록을 표시합니다.이는 비어 있습니다. 이는 개발 중인 웹사이트가 하나뿐이고 트래픽이 없기 때문에 사실입니다.
mysqltuner.pl
-------- Performance Metrics -----------------------------------------------------------------------
[--] Up for: 24m 14s (175K q [120.627 qps], 1K conn, TX: 2G, RX: 37M)
[--] Reads / Writes: 95% / 5%
[--] Binary logging is disabled
[--] Physical Memory : 125.9G
[--] Max MySQL memory : 62.4G
[--] Other process memory: 1.1G
[--] Total buffers: 62.0G global + 2.7M per thread (151 max threads)
[--] P_S Max memory usage: 0B
[--] Galera GCache Max memory usage: 0B
[OK] Maximum reached memory usage: 62.0G (49.29% of installed RAM)
[OK] Maximum possible memory usage: 62.4G (49.60% of installed RAM)
[OK] Overall possible memory usage with other process is compatible with memory available
[OK] Slow queries: 0% (0/175K)
[OK] Highest usage of available connections: 2% (4/151)
[OK] Aborted connections: 0.42% (5/1182)
[!!] name resolution is active : a reverse name resolution is made for each new connection and can reduce performance
[OK] Query cache is disabled by default due to mutex contention on multiprocessor machines.
[OK] Sorts requiring temporary tables: 1% (988 temp sorts / 57K sorts)
[OK] No joins without indexes
[!!] Temporary tables created on disk: 81% (13K on disk / 16K total)
[OK] Thread cache hit rate: 99% (4 created / 1K connections)
[OK] Table cache hit rate: 96% (209 open / 216 opened)
[OK] Open file limit used: 21% (225/1K)
[OK] Table locks acquired immediately: 100% (204K immediate / 204K locks)
(...)
-------- Recommendations ---------------------------------------------------------------------------
General recommendations:
Control warning line(s) into /var/log/mysql/error.log file
Control error line(s) into /var/log/mysql/error.log file
MySQL started within last 24 hours - recommendations may be inaccurate
Enable the slow query log to troubleshoot bad queries
Configure your accounts with ip or subnets only, then update your configuration with skip-name-resolve=1
When making adjustments, make tmp_table_size/max_heap_table_size equal
Reduce your SELECT DISTINCT queries which have no LIMIT clause
Consider installing Sys schema from https://github.com/mysql/mysql-sys
Read this before changing innodb_log_file_size and/or innodb_log_files_in_group: bit.ly/2wgkDvS
Variables to adjust:
tmp_table_size (> 16M)
max_heap_table_size (> 16M)
innodb_log_file_size should be (=7G) if possible, so InnoDB total log files size equals to 25% of buffer pool size.
mysql error.log가 비어 있습니다. 어떤 아이디어가 있나요?
답변1
RAM의 경우 free
명령 출력에서 free+buffers+cached -> 5+1+101 = 107GB가 됩니다.
따라서 실제로 프로그램은 free
출력 120GB RAM - 107GB 여유 공간 + 버퍼 + 캐시 = 13GB를 사용하고 있습니다.
버퍼와 캐시는 다른 요구 사항을 충족하기 위해 언제든지 커널에서 회수할 수 있으며 일반적으로 시간이 지남에 따라 증가하지만 메모리가 증가하면 축소되기도 합니다.
free
및 출력 ps
에서도 볼 수 있듯이 mysqltuner
MySQL RAM 사용량은 대부분 버퍼인 것으로 보입니다.
답변2
MySQL과 메모리 사용량/성능을 사용하는 동안 제가 사용하는 훌륭한 도구는 다음 링크에서 찾을 수 있습니다.
이 링크는 my.cnf 파일의 내용을 가져와 MySQL이 사용할 최대 메모리를 계산하는 편리한 계산기 도구에 지나지 않습니다. 위 링크에서 주목해야 할 몇 가지 주요 변수는 다음과 같습니다.
- 최대 허용 패킷
- 전체(섹션별)
- innodb_buffer_pool_size
- 키 버퍼 크기
- 필요한 총 메모리(X 연결의 경우)
이를 통해 서버의 MySQL/MariaDB 서비스에 필요한 최대 메모리 양에 대한 아이디어를 얻을 수 있습니다. 모든 서버가 서버에 구성된 메모리 양을 사용하는 것은 아니며, 이 계산을 통해 MySQL 구성으로 인해 서버에 메모리가 부족할 가능성이 있는지 여부만 확인할 수 있습니다. 웹 서버와 PHP 설정은 메모리가 부족한 서버에 더 심각한 위협이 됩니다. 많은 서버에서는 max_allowed_packet이 2MB 이상 필요하지 않으며, 대규모 요청을 처리하지 않는 한 애플리케이션 요구 사항에 따라 16MB 이상이 필요하지 않을 수 있습니다.
일반적으로 제가 시스템 관리자였을 때 우리의 목표는 MySQL 서비스가 서버 사용 가능한 메모리의 최대 25%를 소비하여 메모리 부족 상태를 더 효과적으로 방지하는 것이었습니다. 나는 바쁜 MySQL 서버가 얼마나 많은 메모리를 사용할 수 있는지 빠르게 계산하기 위해 이 도구를 자주 사용합니다.
Bash 스크립트를 다시 생성하여 동일한 계산을 수행할 수 있습니다. my.cnf 파일을 분석하면 무엇이 많은 메모리를 차지하고 있는지 파악하는 데 어떻게 도움이 되는지 보여주는 예로서 이 링크를 제공합니다. 이 구성은 세션 수인지 캐시 메모리인지 확인하는 데 도움이 될 수 있습니다. Martin Smith가 언급했듯이 캐시는 언제든지 재활용될 수 있지만 서버를 구성 중이고 MySQL에 가능한 한 많이 캐시하도록 지시할 필요가 없다면 캐시를 그렇게 하도록 지시해서는 안 됩니다. 이를 설명하는 흥미로운 링크가 있습니다.
https://www.linuxatemyram.com/
연결이 많은 메모리를 사용하고 있는지 확인하는 유용한 방법은 CLI에서 다음 명령을 실행하는 것입니다.
mysql -e "SHOW GLOBAL STATUS;"|grep Max_used_
이는 현재 실행 중인 MySQL 서비스 세션에서 사용된 MySQL 연결 수를 알려줍니다. (MySQL을 다시 시작하면 이 변수가 재설정됩니다.) 따라서 150개의 연결을 허용하도록 구성했지만 MySQL 서비스가 도달하는 최대 연결 수는 80이고 서비스가 한동안 다시 시작되지 않았으며 연결이 급증할 것으로 예상하지 마십시오. 150개의 max_connections 구성을 중심으로 my.cnf의 균형을 맞추는 대신 더 나은 성능을 위해 80개의 연결을 허용하도록 my.cnf를 재구성할 수 있습니다. 예를 들어 서버에 더 이상 캐싱이 필요하지 않으면 다시 구성할 필요가 없을 수 있습니다. 이는 최대 사용 시나리오에 관한 것입니다.
이는 RAM을 모두 사용하는 것이 무엇인지 알려주지 못할 수도 있지만 MySQL이 소비할 수 있는 리소스의 양을 더 잘 제어하고 oomkiller/메모리 부족 이벤트를 방지할 수 있도록 서버의 목표 지점을 생성하는 데 도움이 될 수 있습니다.