Автор Гілка: Apache і брак вільної пам’яті  (Прочитано 1937 раз)

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Є така проблемка: є старий сервачок з 512М пам’яті, на якому крутиться apache2+php5+mysql. Останнім часом він не витримує навантаження: пам’ять фізична закінчується, починає юзатися кеш, при цьому сервер гальмує і до нього неможливо «достукатися» (netstat не показує ніякої підозрілої активності, себто це не DDOS, а природній процес).

Задача: як сконфігурувати апач так, щоб кількість одночасних з’єднань не перевищувала можливості сервера? Зараз це виглядає так (apache.conf, він же httpd.conf):
Timeout 60                                                                                                                                                                        
                                                                                                                                                                                  
#                                                                                                                                                                                
# KeepAlive: Whether or not to allow persistent connections (more than                                                                                                            
# one request per connection). Set to "Off" to deactivate.                                                                                                                        
#                                                                                                                                                                                
KeepAlive On                                                                                                                                                                      
                                                                                                                                                                                  
#                                                                                                                                                                                
# MaxKeepAliveRequests: The maximum number of requests to allow                                                                                                                  
# during a persistent connection. Set to 0 to allow an unlimited amount.                                                                                                          
# We recommend you leave this number high, for maximum performance.                                                                                                              
#                                                                                                                                                                                
MaxKeepAliveRequests 50                                                                                                                                                          
                                                                                                                                                                                  
#                                                                                                                                                                                
# KeepAliveTimeout: Number of seconds to wait for the next request from the                                                                                                      
# same client on the same connection.                                                                                                                                            
#                                                                                                                                                                                
KeepAliveTimeout 10                                                                                                                                                              
                                                                                                                                                                                  
##                                                                                                                                                                                
## Server-Pool Size Regulation (MPM specific)                                                                                                                                    
##                                                                                                                                                                                
                                                                                                                                                                                  
# prefork MPM                                                                                                                                                                    
# StartServers: number of server processes to start                                                                                                                              
# MinSpareServers: minimum number of server processes which are kept spare                                                                                                        
# MaxSpareServers: maximum number of server processes which are kept spare                                                                                                        
# MaxClients: maximum number of server processes allowed to start                                                                                                                
# MaxRequestsPerChild: maximum number of requests a server process serves                                                                                                        
<IfModule mpm_prefork_module>                                                                                                                                                    
    StartServers          5                                                                                                                                                      
    MinSpareServers       5                                                                                                                                                      
    MaxSpareServers      10                                                                                                                                                      
    MaxClients           50                                                                                                                                                      
    MaxRequestsPerChild   0                                                                                                                                                      
</IfModule>                                                                                                                                                                      
                                                                                                                                                                                  
# worker MPM                                                                                                                                                                      
# StartServers: initial number of server processes to start                                                                                                                      
# MaxClients: maximum number of simultaneous client connections                                                                                                                  
# MinSpareThreads: minimum number of worker threads which are kept spare                                                                                                          
# MaxSpareThreads: maximum number of worker threads which are kept spare                                                                                                          
# ThreadsPerChild: constant number of worker threads in each server process                                                                                                      
# MaxRequestsPerChild: maximum number of requests a server process serves                                                                                                        
<IfModule mpm_worker_module>                                                                                                                                                      
    StartServers          2                                                                                                                                                      
    MaxClients           50                                                                                                                                                      
    MinSpareThreads      25                                                                                                                                                      
    MaxSpareThreads      75                                                                                                                                                      
    ThreadsPerChild      25                                                                                                                                                      
    MaxRequestsPerChild   0                                                                                                                                                      
</IfModule>                      

Як порадите встановити ці параметри? При цьому хочу, щоб ті, хто під’єднується, отримували помилку 500 в разі, якщо їх з’єднання перевищує норму (так, як на Твітері, наприклад).  

Також вислухаю поради щодо конфігурування mysql в цьому випадку.
« Змінено: 2009-11-05 17:30:17 від noddeat »
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Відсутній coirius

  • Кореспондент
  • ***
  • дописів: 175
  • Карма: +0/-0
  • ArchLinux
Re: Apache і брак вільної пам’яті
« Відповідей #1 : 2009-11-05 23:01:01 »
/me зменшив би значення параметра MaxKeepAliveRequests до 10-15

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Apache і брак вільної пам’яті
« Відповідей #2 : 2009-11-06 00:02:42 »
Та я взгалаі KeepAlive пробував вимикати, але щось не дуже допомагало.
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Відсутній coirius

  • Кореспондент
  • ***
  • дописів: 175
  • Карма: +0/-0
  • ArchLinux
Re: Apache і брак вільної пам’яті
« Відповідей #3 : 2009-11-06 00:13:09 »
мені здається, що тут проблема не в апачі,а мережі/системі, більш за все в системі

Відсутній DalekiyObriy

  • Літератор
  • ******
  • дописів: 1929
  • Карма: +5/-0
Re: Apache і брак вільної пам’яті
« Відповідей #4 : 2009-11-06 18:20:32 »
google: apache config on low memory
Fedora 35 (x86-64)

Відсутній DalekiyObriy

  • Літератор
  • ******
  • дописів: 1929
  • Карма: +5/-0
Re: Apache і брак вільної пам’яті
« Відповідей #5 : 2009-11-06 18:21:31 »
…окрім того зробити ps aux коли пам’ять вичерпано, щоб знати певне хто там такий ненажера
Fedora 35 (x86-64)

Відсутній Volodymyrko

  • Графоман
  • ****
  • дописів: 370
  • Карма: +0/-0
  • I Like FreeBSD !
Re: Apache і брак вільної пам’яті
« Відповідей #6 : 2009-11-09 16:31:24 »
а скільки httpd процесів в момент тормозіння серверу ...
і чи дійсно тут тормозить апач... може це все таке mysql ???
в біьлшості випадків  є сенс поставити nginx.. після його встановлення к-ть httpd процесів однозначно зменшиться і частина памяті вивільниться ...
« Змінено: 2009-11-09 16:32:32 від vova07 »

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Apache і брак вільної пам’яті
« Відповідей #7 : 2009-11-09 17:26:52 »
То таки апач, ось вивід ps aux (ненульові процеси):
mysql    19965  0.8  2.1 157552 10828 pts/0    Sl   06:57   0:42 /usr/sbin/mysqld --basedir=/usr --datadir=/home/muskla --user=mysql --pid-file=/var/run/mysq
root     19967  0.0  0.0   2804   420 pts/0    S    06:57   0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root     20020  0.0  0.4  23256  2404 ?        Ss   06:58   0:00 apache2 -k start
www-data 20105  0.4  3.6  37776 18960 ?        S    07:01   0:22 apache2 -k start
www-data 20106  0.5  3.6  41172 18816 ?        D    07:01   0:23 apache2 -k start
www-data 20110  0.4  0.7  33476  3848 ?        S    07:01   0:19 apache2 -k start
www-data 20111  0.4  3.7  38828 19448 ?        S    07:01   0:20 apache2 -k start
www-data 20114  0.4  1.7  34568  8764 ?        S    07:01   0:19 apache2 -k start
www-data 20115  0.4  0.7  33652  3792 ?        S    07:01   0:19 apache2 -k start
www-data 20116  0.4  1.9  39668 10200 ?        S    07:01   0:23 apache2 -k start
www-data 20117  0.2  1.8  39528  9692 ?        D    07:01   0:13 apache2 -k start
www-data 20118  0.4  1.1  38728  5888 ?        S    07:01   0:19 apache2 -k start
www-data 20119  0.5  1.1  38924  5696 ?        S    07:01   0:23 apache2 -k start
www-data 20120  0.3  2.0  39336 10704 ?        S    07:01   0:16 apache2 -k start
www-data 20121  0.4  2.6  34584 13668 ?        D    07:01   0:20 apache2 -k start
www-data 20122  0.3  1.5  38604  7748 ?        S    07:01   0:17 apache2 -k start
www-data 20123  0.4  2.0  39312 10564 ?        D    07:01   0:18 apache2 -k start
www-data 20124  0.3  1.5  34560  7744 ?        S    07:01   0:17 apache2 -k start
www-data 20125  0.4  3.1  37584 16004 ?        D    07:01   0:18 apache2 -k start
www-data 20126  0.3  2.4  34292 12824 ?        D    07:01   0:15 apache2 -k start
www-data 20127  0.6  1.1  38892  5856 ?        S    07:01   0:27 apache2 -k start
www-data 20128  0.4  2.6  38440 13676 ?        D    07:01   0:20 apache2 -k start
www-data 20129  0.3  3.7  38584 19080 ?        S    07:01   0:17 apache2 -k start
www-data 20130  0.4  3.6  38684 18832 ?        S    07:01   0:22 apache2 -k start
www-data 20131  0.4  1.0  38656  5564 ?        S    07:01   0:20 apache2 -k start
www-data 20132  0.4  3.0  39424 15764 ?        D    07:01   0:22 apache2 -k start
www-data 20133  0.5  1.4  35708  7692 ?        S    07:01   0:24 apache2 -k start
www-data 20134  0.4  1.8  38744  9684 ?        S    07:01   0:23 apache2 -k start
www-data 20135  0.4  2.1  33660 11156 ?        S    07:01   0:19 apache2 -k start
www-data 20136  0.3  0.7  35936  3880 ?        S    07:01   0:15 apache2 -k start
www-data 20137  0.4  2.8  34716 14520 ?        S    07:01   0:20 apache2 -k start
www-data 20138  0.4  3.6  37796 18620 ?        S    07:01   0:21 apache2 -k start
www-data 20139  0.3  3.5  39432 18200 ?        D    07:01   0:17 apache2 -k start
www-data 20140  0.4  0.7  32032  3796 ?        S    07:01   0:19 apache2 -k start
www-data 20141  0.3  2.2  39972 11796 ?        D    07:01   0:18 apache2 -k start
www-data 20142  0.2  2.2  38212 11464 ?        D    07:01   0:13 apache2 -k start
www-data 20143  0.4  1.5  31560  7748 ?        S    07:01   0:19 apache2 -k start
www-data 20144  0.5  1.2  34812  6220 ?        S    07:01   0:27 apache2 -k start
www-data 20145  0.4  2.0  38940 10476 ?        S    07:01   0:18 apache2 -k start
www-data 20146  0.2  3.6  39792 19008 ?        D    07:01   0:13 apache2 -k start
www-data 20147  0.5  2.1  36448 10916 ?        S    07:01   0:23 apache2 -k start
www-data 20148  0.3  3.6  37900 18696 ?        S    07:01   0:17 apache2 -k start
www-data 20149  0.3  3.6  37752 18620 ?        S    07:01   0:15 apache2 -k start
www-data 20150  0.6  3.8  39352 19736 ?        S    07:01   0:30 apache2 -k start
www-data 20151  0.4  3.7  38684 19376 ?        S    07:01   0:19 apache2 -k start
www-data 20152  0.2  2.0  35980 10500 ?        S    07:01   0:12 apache2 -k start
www-data 20153  0.5  1.4  38764  7572 ?        S    07:01   0:23 apache2 -k start
www-data 20154  0.4  3.6  37792 18584 ?        S    07:01   0:21 apache2 -k start
www-data 20155  0.4  1.6  34504  8680 ?        S    07:01   0:18 apache2 -k start
www-data 20156  0.4  3.6  40156 18696 ?        D    07:01   0:18 apache2 -k start
www-data 20157  0.3  2.7  39848 14076 ?        D    07:01   0:13 apache2 -k start
www-data 20158  0.3  2.7  34436 14052 ?        D    07:01   0:15 apache2 -k start
www-data 20159  0.3  0.7  36964  3864 ?        S    07:01   0:14 apache2 -k start
root     20191  0.0  0.3   5864  1664 pts/0    S+   07:10   0:00 mc
root     20193  0.0  0.1   4096   960 pts/1    Ss   07:10   0:00 bash -rcfile .bashrc
postfix  20552  0.0  0.0   4964   484 ?        S    07:53   0:00 pickup -l -t fifo -u -c
root     20625  0.0  0.0      0     0 ?        D    08:11   0:00 [pdflush]
root     20629  0.0  0.0      0     0 ?        D    08:16   0:00 [pdflush]
root     20631  0.0  0.0      0     0 ?        D    08:16   0:00 [pdflush]
root     20636  0.0  0.1   2564   996 pts/1    R+   08:18   0:00 ps aux
root     20637  0.0  0.0      0     0 ?        D    08:18   0:00 [pdflush]
root     22162  0.0  0.0   4952   448 ?        Ss   Oct31   2:53 /usr/lib/postfix/master
postfix  22166  0.0  0.0   5492   404 ?        S    Oct31   2:34 qmgr -l -t fifo -u
postfix  22171  0.0  0.0   5128   392 ?        S    Oct31   1:38 tlsmgr -l -t unix -u -c

# сat /proc/meminfo
MemTotal:       514928 kB
MemFree:          5080 kB
Buffers:          3284 kB
Cached:          17744 kB
SwapCached:     376408 kB
Active:         331148 kB
Inactive:       149696 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:       514928 kB
LowFree:          5080 kB
SwapTotal:     1935760 kB
SwapFree:      1205236 kB
Dirty:             416 kB
Writeback:        1180 kB
AnonPages:      411684 kB
Mapped:           6476 kB
Slab:            15488 kB
SReclaimable:     3708 kB
SUnreclaim:      11780 kB
PageTables:       5012 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   2193224 kB
Committed_AS:  1100592 kB
VmallocTotal:   511992 kB
VmallocUsed:      5052 kB
VmallocChunk:   506684 kB

Цитата
в біьлшості випадків  є сенс поставити nginx.. після його встановлення к-ть httpd процесів однозначно зменшиться і частина памяті вивільниться ...
дякую, спробую.

upd.: спробував: його, я так розумію, треба налаштовувати окремо, він не «підхоплює» вже налаштовані віртуальні хости апача. буду курити мани.
« Змінено: 2009-11-09 17:45:30 від noddeat »
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Відсутній noddeat

  • Кореспондент
  • ***
  • дописів: 197
  • Карма: +0/-0
Re: Apache і брак вільної пам’яті
« Відповідей #8 : 2009-11-09 19:55:23 »
схоже, проблема вирішиться сама: сайт на вордпресі, що «валив» сервер, від нас з’їде. але все одно буду вдячний за посилання на хороші «ЯкЦе» щодо конфігурування зв’язки nginx+apache+php+mysql для кількох сайтів.
« Змінено: 2009-11-09 19:55:44 від noddeat »
Filenames are infinite in length, where infinity is set to to 255 characters. Peter Collinson, "The Unix File System"

Відсутній DalekiyObriy

  • Літератор
  • ******
  • дописів: 1929
  • Карма: +5/-0
Re: Apache і брак вільної пам’яті
« Відповідей #9 : 2009-11-12 14:32:04 »
схоже, проблема вирішиться сама: сайт на вордпресі, що «валив» сервер, від нас з’їде. але все одно буду вдячний за посилання на хороші «ЯкЦе» щодо конфігурування зв’язки nginx+apache+php+mysql для кількох сайтів.
о! до речі я коли недавно пробував різні cms також поставив wordpress (всередині контейнера з малою пам’ятюю) - він мені зжер всю пам’ять одразу, а оскільки там прийшлось рестарт робити
так що для цього звірюки треба додатково пам’яті
з іншими cms, що я пробував таких проблем не було
Fedora 35 (x86-64)