O Apache está usando 100% de CPU, mesmo com um usuário

1

O Apache está usando 100% de CPU, mesmo com um usuário

O Apache (ou devo dizer PHP através do Apache?) está usando 100% de CPU por alguns segundos toda vez que alguém pesquisa bugs no nosso bug tracker ou apenas recarrega a página de resultados da pesquisa ou simplesmente ordena os resultados.

Isso causa um carregamento de página muito lento. Isso ocorre mesmo se eu acessar nosso rastreador de bugs da própria máquina do servidor.

A minha pergunta é o que parece ser o gargalo aqui (configuração do apache, configuração do php, mysql config, cache, módulos php ou outra coisa?) e o que devo tentar fazer para corrigir isso?


Software que estamos usando (baixado alguns meses atrás e não atualizado após isso):

Kubuntu: 14.04.3 LTS

PHP: 5.5.9 (Eu acho que rodando como mod apache? CGI? Não parece ser fastCGI)

apache2 : 2.4.7 (PREFORK)

mysql: 5.5.44

O Bug Genie (software de acompanhamento de bugs): 4.1.0


Aqui está a imagem do Firebug.

"POSTpaginado" é o mais pesado, leva 1s para receber 4.0M mas tem que esperar 7s antes de poder receber.

Aqui está uma imagem do cabeçalho de "POST paginado".




Equantoaoservidor,estáfazendoassim.

Parece que o pedido de "paginado" exigiu 7-8 segundos para processar.

Aprimeiraondaéquandoprocuroeexibocercade250edições(“POSTpaginado”)easegundaéquandofaçoumapequenaaçãocomoiraumapáginadeproblema.VocêpodeverqueatémesmopequenasaçõesexigemmuitoCPU.

Eu não sei porque tanta memória é usada (1.6G de 2.0G), mesmo se eu não acessar o bug tracker, mas de qualquer forma a memória livre parece ser suficiente.

NãoparecehaverproblemasdeE/S("% iowait" é baixo e "await" pode ser maior que "svctm" às vezes, mas apenas algumas vezes)

Enãoparecequehajamuitatrocaporaí.




Aquiestãoasnossasconfigurações(apartequepodeinteressaraomeupalpite).

Apache2.conf(nãousandohttpd.conf)

ServerNamelocalhostTimeout300KeepAliveOnMaxKeepAliveRequests100KeepAliveTimeout5HostnameLookupsOff<Directory/var/www/html/bugs2/>OptionsIndexesMultiViewsAllowOverrideAllOrderallow,denyAllowfromall</Directory>AccessFileName.htaccess

Aalteraçãodonomedoservidorpara127.0.0.1nãoajudou.

Eutambémtentoadicionarotextoabaixoaoapache.conf,masissonãomudarianada.Euachoqueéporquejáexisteompm_prefork.confqueébempróximo(apenasoMaxRequestWorkersé150).

<IfModulempm_prefork_module>StartServers5MinSpareServers5MaxSpareServers10MaxClients20MaxRequestsPerChild0</IfModule>

.htaccess

<IfModulemod_php5.c>php_flagmagic_quotes_gpcoffphp_flagregister_globalsoff</IfModule>Options+FollowSymlinks<IfModulemod_rewrite.c>RewriteEngineOnRewriteBase/bugs2/public/RewriteCond%{REQUEST_FILENAME}-s[OR]RewriteCond%{REQUEST_FILENAME}-l[OR]RewriteCond%{REQUEST_FILENAME}-dRewriteRule^.*$-[NC,L]RewriteRule^(.*)$index.php?url=$1[NC,QSA,L]RewriteCond%{REQUEST_URI}\..+$/RewriteCond%{REQUEST_URI}!\.(html|wsdl|json|xml)$RewriteRule.*-[L]RewriteRule^(.*)$index.php?url=$1[NC,QSA,L]RedirectMatch403^/\.svn(/|$)</IfModule>

Háalgunsdiascoloqueiabaixomod_expires,mod_headers,mod_deflate,mod_gzipem.htaccess,masnãoconseguivernenhumadiferençanousodaCPUounavelocidadedecarregamentoantes/depois.

<IfModulemod_expires.c>ExpiresActiveonExpiresDefault"access plus 24 hours"

    ExpiresByType application/json "access plus 1 months"
    ExpiresByType image/jpg "access plus 1 months"
    ExpiresByType image/gif "access plus 1 months"
    ExpiresByType image/jpeg "access plus 1 months"
    ExpiresByType image/png "access plus 1 months"
    ExpiresByType text/css "access plus 1 months"
    ExpiresByType text/javascript "access plus 1 months"
    ExpiresByType application/javascript "access plus 1 months"
    ExpiresByType application/x-shockwave-flash "access plus 1 months"
    ExpiresByType application/x-javascript "access plus 1 months"
    ExpiresByType application/pdf "access plus 1 months"
    ExpiresByType image/x-icon "access plus 1 year"
</IfModule>

<ifModule mod_headers.c>
  <filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public, no-transform"
  </filesMatch>
  <filesMatch "\.(css)$">
    Header set Cache-Control "max-age=604800, public"
  </filesMatch>
  <filesMatch "\.(js)$">
    Header set Cache-Control "max-age=216000, private"
  </filesMatch>
  <filesMatch "\.(xml|txt)$">
    Header set Cache-Control "max-age=216000, public, must-revalidate"
  </filesMatch>
  <filesMatch "\.(html|htm|php)$">
    Header set Cache-Control "max-age=1, private, must-revalidate"
  </filesMatch>
    Header unset ETag
    Header unset Last-Modified
</ifModule>

<IfModule mod_deflate.c>
     SetOutputFilter DEFLATE

     BrowserMatch ^Mozilla/4\.0[678] no-gzip
     BrowserMatch ^Mozilla/4 gzip-only-text/html
     BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

     SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary
     SetEnvIfNoCase Request_URI _\.utxt$ no-gzip

     AddOutputFilterByType DEFLATE text/plain
     AddOutputFilterByType DEFLATE text/html
     AddOutputFilterByType DEFLATE text/xml
     AddOutputFilterByType DEFLATE text/css
     AddOutputFilterByType DEFLATE application/xhtml+xml
     AddOutputFilterByType DEFLATE application/xml
     AddOutputFilterByType DEFLATE application/rss+xml
     AddOutputFilterByType DEFLATE application/atom_xml
     AddOutputFilterByType DEFLATE application/x-javascript
     AddOutputFilterByType DEFLATE application/x-httpd-php
     AddOutputFilterByType DEFLATE application/json
</IfModule>

<ifModule mod_gzip.c>
    mod_gzip_on Yes
    mod_gzip_dechunk Yes
    mod_gzip_item_include file .(html?|txt|css|js|php|pl|json)$
    mod_gzip_item_include handler ^cgi-script$
    mod_gzip_item_include mime ^text/.*
    mod_gzip_item_include mime ^application/x-javascript.*
    mod_gzip_item_exclude mime ^image/.*
    mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

Eu também tentei usar o filesMatch em vez do ExpiresByType na parte do mod_expires e não ajudou muito.

Php.ini

engine = On
output_buffering = 4096
disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M

Pela maneira que eu posso ver outros limites de memória quando executar phpinfo ()

Masprovavelmenteissonãoimporta.

my.cnf

bind-address=localhostskip-external-lockingskip-name-resolvekey_buffer=16Mmax_allowed_packet=16Mthread_stack=192Kthread_cache_size=8myisam-recover=BACKUPquery_cache_limit=1Mquery_cache_size=16M

Mudarobind-addresspara127.0.0.1nãoajudou.

MódulosPhpinstalados

BcmathBz2CalendarCoreCtypeCurlDateDbaDomEregExifFileinfoFilterftpgdgettexthashiconvjsonlibxmlmbstringmhashmysqlmysqliopensslpcntlpcrePDOPdo_mysqlPharPosixReadlineReflectionSessionShmopSimpleXMLSoapSocketsSPLStandardSysvmsgSysvsemSysvshmTokenizerWddxXmlXmlreaderXmlwriterZendOPcacheZipZlib

Euaprendiqueàsvezesmódulosphppodemcausaressetipodecoisa,maseunãotenteipará-losumporumainda.Alémdisso,nãotenhomuitacerteza,masparecequeoOPcacheestáfuncionando.

Módulos do Apache instalados

Core_module (static)
So_module (static)
watchdog_module (static)
http_module (static)
log_config_module (static)
version_module (static)
unixd_module (static)
access_compat_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_core_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
filter_module (shared)
mime_module (shared)
mpm_prefork_module (shared)
negotiation_module (shared)
php5_module (shared)
rewrite_module (shared)
setenvif_module (shared)
status_module (shared)




Os registros de acesso e de erros não mostram nada de especial ou suspeito.

    
por Hamma 03.03.2016 / 09:35

0 respostas