Portál AbcLinuxu, 26. října 2025 23:12
# cat /proc/sys/vm/overcommit_memory 0 # lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 2 Core(s) per socket: 4 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 60 Model name: Intel(R) Xeon(R) CPU E3-1246 v3 @ 3.50GHz Stepping: 3 CPU MHz: 3791.621 CPU max MHz: 3900.0000 CPU min MHz: 800.0000 BogoMIPS: 7000.23 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 8192K NUMA node0 CPU(s): 0-7
# apachectl -V
Server version: Apache/2.4.10 (Debian)
Server built: Aug 1 2015 20:53:57
Server's Module Magic Number: 20120211:37
Server loaded: APR 1.5.1, APR-UTIL 1.5.4
Compiled using: APR 1.5.1, APR-UTIL 1.5.4
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
# cat /etc/mysql/my.cnf | egrep -v "(^#.*|^$)" [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking bind-address = 127.0.0.1 key_buffer = 16M max_allowed_packet = 16M thread_stack = 192K thread_cache_size = 8 myisam-recover = BACKUP max_connections = 250 low_priority_updates = 1 query_cache_limit = 1M query_cache_size = 16M log_error = /var/log/mysql/error.log expire_logs_days = 10 max_binlog_size = 100M [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] [isamchk] key_buffer = 16M !includedir /etc/mysql/conf.d/
# cat /etc/apache2/apache2.conf | egrep -v "(^#.*|^$)"
Mutex file:${APACHE_LOCK_DIR} default
PidFile ${APACHE_PID_FILE}
Timeout 45
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
A toto sú výpisy zo starého, kde to funguje relatívne dobre:
# cat /proc/sys/vm/overcommit_memory 0 #lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit CPU(s): 8 Thread(s) per core: 2 Core(s) per socket: 4 CPU socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 58 Stepping: 9 CPU MHz: 3399.943 Virtualization: VT-x L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 8192K
# apachectl -V
Server version: Apache/2.2.16 (Debian)
Server built: Feb 1 2014 21:22:42
Server's Module Magic Number: 20051115:24
Server loaded: APR 1.4.2, APR-Util 1.3.9
Compiled using: APR 1.4.2, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Prefork
threaded: no
forked: yes (variable process count)
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork"
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=128
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_LOCKFILE="/var/run/apache2/accept.lock"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
# cat /etc/mysql/my.cnf | egrep -v "(^#.*|^$)" [client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english skip-external-locking bind-address = 127.0.0.1 key_buffer = 16M max_allowed_packet = 16M thread_stack = 192K thread_cache_size = 8 myisam-recover = BACKUP low_priority_updates = 1 query_cache_limit = 1M query_cache_size = 16M expire_logs_days = 10 max_binlog_size = 100M [mysqldump] quick quote-names max_allowed_packet = 16M [mysql] [isamchk] key_buffer = 16M !includedir /etc/mysql/conf.d/
# cat /etc/apache2/apache2.conf | egrep -v "(^#.*|^$)"
LockFile ${APACHE_LOCK_DIR}/accept.lock
PidFile ${APACHE_PID_FILE}
Timeout 45
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 5
MaxSpareServers 10
MaxClients 30
MaxRequestsPerChild 2000
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 150
MaxRequestsPerChild 2000
</IfModule>
<IfModule mpm_event_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
AccessFileName .htaccess
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy all
</Files>
DefaultType text/plain
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
Include mods-enabled/*.load
Include mods-enabled/*.conf
Include httpd.conf
Include ports.conf
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
Include conf.d/
Include sites-enabled/
Řešení dotazu:
cat /sys/block/sda/queue/scheduler
# cat /sys/block/sda/queue/scheduler noop anticipatory deadline [cfq]nový:
# cat /sys/block/sda/queue/scheduler noop deadline [cfq]Myslíte, že to bude ono? Vyzerá to nádejne :)
echo deadline > /sys/block/sda/queue/scheduler echo deadline > /sys/block/sdb/queue/schedulerUž to je omnoho lepšie, bude to potrebné ešte trocha doladiť, ale nedá sa to porovnať so stavom predtým. Síce nerozumiem, že na oboch bol cfg a pritom na starom to nebolo také katastrofálne, ale hlavne, že sa to poriešilo.
takze ten "muj" script zacina necim takovym:
renice +15 $$ ionice -p $$ -c 3 cgcreate -g memory:/cg_zalohy echo 1G > /sys/fs/cgroup/memory/cg_zalohy/memory.limit_in_bytes(renice a ionice resily problem jen ze zacatku, dokud nebylo virtualu vic...) cgroups se postaraji, aby si to proste vic vzit neumelo a fajn je, ze ani diskove cache... takze od te doby ty masiny uz do swapu nechodi, bo na "svoji" praci maji pameti dost.... Ve stejne skupine zustanou i procesy spustene z toho scriptu. Pokud ty data budes posilat do mysql, to si bude s ramkou zase hospodarit "samo".... pripadne mu taky muzes vytvorit jeho cgroup, ale s rozumem... pujde to na ukor vykonu, kdyz ho vezmes pod krkem prilis.
Navic jestli se s nim bavi zaroven web... problem to asi nevyresi.
Cgroups toho umi mnohem vic, ale ... clovek je od prirody liny a mi uz ta ram vytrhla trn z paty, takze sem to dal nezkoumal.
(servery maji vetsinou 14.04Ub., doufam, ze ten debian ma podporu taky)
S RAM by to nemelo mit nic spolecneho. Dulezite je to I/O - 100% disk znamena saturace disku a veskere operace se zpomali a dojde k pretizeni serveru. Doporucil bych kontrolu celeho diskoveho substystemu, jako SW, tak HW. Btw, hodte sem neco jako: "iostat -x 10". Jakym zpusobem se tam sypalo tech 17GB, pri kterych doslo k narustu cteni vs zapis?
# iostat -x 10
Linux 3.16.0-4-amd64 08/17/2015 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
3.61 0.00 0.51 2.00 0.00 93.88
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sdb 0.03 28.89 17.21 25.11 280.48 1484.60 83.42 2.31 54.70 11.73 84.15 2.00 8.47
sda 0.06 28.92 32.52 25.08 815.83 1484.60 79.87 2.58 44.75 7.44 93.12 2.06 11.85
md1 0.00 0.00 0.00 0.00 0.01 0.00 7.20 0.00 0.00 0.00 0.00 0.00 0.00
md0 0.00 0.00 0.00 0.00 0.01 0.00 8.00 0.00 0.00 0.00 0.00 0.00 0.00
md2 0.00 0.00 49.81 53.41 1096.26 1484.30 50.00 0.00 0.00 0.00 0.00 0.00 0.00
Ako som spomínal vyššie, nastavil som scheduler deadline.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.