Server Congelar sob carga

3

Estou tendo um problema com um servidor Debian que achei que era devido a RAM ruim, mas está persistindo.

É um Dell Poweredge 6800 com dois processadores dual-core 3.6GHZ Xeon e 5 GB de DDR2 ECC 333.

Eu tenho um único drive SCSI de 73GB.

Eu estou trabalhando até a morte agora, puxando registros do MySQL para construir arquivos .call (pequenos arquivos de texto) que disparam chamadas SIP.

Nós o gerenciamos por meio de uma interface cgi, e o sistema também está executando o citadel para o nosso e-mail, mas temos menos de cinco usuários. Não é um dreno enorme.

Meu pico de uso parece ser de cerca de 460 chamadas por minuto. Carregar focos entre 2,0 - 4,3, se eu passar por isso, picos para > 22,0.

O problema que estou tendo é que, cerca de uma hora em uma discagem, está congelando em mim. Ontem à noite eu comecei às 5:59, e às 6:55:17 segundos, o sistema ficou sem resposta. Nada foi registrado, não consegui me conectar via ssh ou http, ele respondeu ao ping, e o nmap mostrou portas abertas para as quais eu consegui fazer telnet, mas não obteve nenhuma resposta.

Minha coleta de dados do sar funcionou às 6:50 e, naquela época, eu estava vendo uso pesado, como esperado, mas nada ultrajante, tanto quanto eu posso dizer.

O sistema estava reclamando de um erro de memória em uma das novas tiras de 2GB que eu tinha instalado, então após o primeiro acidente, eu substituí esse par pelas tiras de 512MB que nós atualizamos.

No momento, estou discando com uma coleta de dados ao vivo do sar em execução, caso ela falhe novamente. Pelo menos eu serei capaz de discar com um pouco mais de granularidade.

Além disso, estou perdido em como diagnosticar o congelamento do sistema na ausência de dados de log relevantes ou um despejo de memória. Como o sistema ainda está em execução, mas não responde completamente durante esse tempo, até que eu execute um ciclo de energia. Alguma idéia?

OBSERVAÇÃO: tenho novos servidores para retirar parte da carga desse sistema distribuindo serviços, mas, enquanto isso, é um tempo médio em que nossa produção está confiando nesse trabalho pesado.

Aqui é o Sar dados do acidente de ontem à noite.

ATUALIZAÇÃO: Este snapshot do sar estava sendo executado em incrementos de 10 segundos, reunidos pela última vez 1 s antes de congelar

Eu comprei um servidor de console de terminal e agora posso ver o que está acontecendo quando o sistema congela.

Este conjunto de mensagens repete-se a cada 30 segundos, percorrendo CPU1 e CPU2

[17675.940127] BUG: soft lockup - CPU#1 stuck for 61s! [asterisk:4579]
[17675.940127] Modules linked in: btrfs zlib_deflate crc32c libcrc32c ufs qnx4 hfsplus hfs minix ntfs vfat msdos fat jfs xfs reiserfs ext]
[17675.940127] 
[17675.940127] Pid: 4579, comm: asterisk Not tainted (2.6.32-5-686-bigmem #1) PowerEdge 6800
[17675.940127] EIP: 0060:[<c1024c6f>] EFLAGS: 00000202 CPU: 1
[17675.940127] EIP is at native_flush_tlb_others+0x85/0xa6
[17675.940127] EAX: 00000282 EBX: c14620ac ECX: c102fb3a EDX: 00000020
[17675.940127] ESI: 00000001 EDI: 00000040 EBP: c14620a0 ESP: f35d1a3c
[17675.940127]  DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
[17675.940127] CR0: 80050033 CR2: b3f06946 CR3: 36787000 CR4: 000006f0
[17675.940127] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
[17675.940127] DR6: ffff0ff0 DR7: 00000400
[17675.940127] Call Trace:
[17675.940127]  [<c1024d57>] ? flush_tlb_page+0x5d/0x65
[17675.940127]  [<c1024144>] ? ptep_set_access_flags+0x59/0x63
[17675.940127]  [<c10a13c8>] ? do_wp_page+0x3b9/0x7dd
[17675.940127]  [<c1025a1d>] ? kmap_atomic_prot+0xd7/0xfc
[17675.940127]  [<c10a3173>] ? handle_mm_fault+0x982/0xa22
[17675.940127]  [<c104d52d>] ? lock_hrtimer_base+0x15/0x2f
[17675.940127]  [<c104d5ab>] ? hrtimer_try_to_cancel+0x2f/0x35
[17675.940127]  [<c12823e8>] ? do_page_fault+0x2f1/0x307
[17675.940127]  [<c12820f7>] ? do_page_fault+0x0/0x307
[17675.940127]  [<c1280923>] ? error_code+0x73/0x78
[17675.940127]  [<c10c00d8>] ? copy_strings+0x94/0x1ba
[17675.940127]  [<c10c6b8a>] ? do_sys_poll+0x2c3/0x312
[17675.940127]  [<c10c7586>] ? __pollwait+0x0/0xa5
[17675.940127]  [<c10c762b>] ? pollwake+0x0/0x65
[17675.940127]  [<c10c762b>] ? pollwake+0x0/0x65
[17675.940127]  [<c10c762b>] ? pollwake+0x0/0x65
[17675.940127]  [<c10c762b>] ? pollwake+0x0/0x65
[17675.940127]  [<c1026614>] ? activate_task+0x1e/0x24
[17675.940127]  [<c1032713>] ? push_rt_task+0x208/0x242
[17675.940127]  [<c102acb9>] ? post_schedule+0x31/0x3e
[17675.940127]  [<c127f5d6>] ? schedule+0x78f/0x7dc
[17675.940127]  [<c10567d5>] ? futex_wait_setup+0x5c/0xcd
[17675.940127]  [<c10568cd>] ? futex_wait_queue_me+0x87/0x98
[17675.940127]  [<c100c96a>] ? sched_clock+0x5/0x7
[17675.940127]  [<c1091b00>] ? zone_watermark_ok+0x16/0x99
[17675.940127]  [<c1087baa>] ? cpupri_find+0x4c/0xd6
[17675.940127]  [<c109270c>] ? get_page_from_freelist+0xc0/0x3c7
[17675.940127]  [<c102d917>] ? check_preempt_curr_rt+0x76/0xe3
[17675.940127]  [<c1024e31>] ? smp_invalidate_interrupt+0x73/0x86
[17675.940127]  [<c1092cd4>] ? __alloc_pages_nodemask+0xf3/0x4d9
[17675.940127]  [<c113d358>] ? cpumask_any_but+0x20/0x2b
[17675.940127]  [<c1024d44>] ? flush_tlb_page+0x4a/0x65
[17675.940127]  [<c127fe16>] ? mutex_lock+0xb/0x24
[17675.940127]  [<c10bb225>] ? do_sync_read+0xc0/0x107
[17675.940127]  [<c10438d5>] ? do_send_sig_info+0x4f/0x59
[17675.940127]  [<c104a97a>] ? autoremove_wake_function+0x0/0x2d
[17675.940127]  [<c1051af5>] ? ktime_get_ts+0xcd/0xd5
[17675.940127]  [<c10c6d2b>] ? sys_poll+0x44/0x8d
[17675.940127]  [<c100813b>] ? sysenter_do_call+0x12/0x28

A primeira iteração tinha outro conjunto de módulos listados.

[267866.376128] Modules linked in: cpufreq_powersave cpufreq_stats cpufreq_conservative cpufreq_userspace parport_pc ppdev lp parport sco bridge stp bnep rfcomm l2cap crc16 bluetooth rfkill nfsd lockd nfs_acl auth_rpcgss sunrpc exportfs binfmt_misc fuse loop radeon ttm psmouse drm_kms_helper serio_raw evdev pcspkr drm i2c_algo_bit rng_core i2c_core dcdbas shpchp button pci_hotplug processor ext3 jbd mbcache sd_mod crc_t10dif sg sr_mod cdrom ata_generic uhci_hcd ata_piix mptspi mptscsih ehci_hcd mptbase usbcore nls_base libata tg3 scsi_transport_spi scsi_mod floppy libphy thermal thermal_sys [last unloaded: scsi_wait_scan]

Eu instalei intel-microcode microcode.ctl e não descobri como desabilitar o hyperthreading como alguns outros fóruns sugeriram.

    
por TaoJoannes 02.05.2012 / 16:53

2 respostas

2

Acho que esse padrão pode ter a ver com a E / S em gravação tão alta que os discos não estão sendo sincronizados. Isso explicaria o súbito aumento de carga durante o qual nada é registrado, o que eventualmente se resolve.

Se este for o caso, / proc / meminfo mostrará um valor alto para "Dirty" quando o sistema estiver congelando, e você poderá ver mensagens dmesg / syslog como:

INFO: task syslogd:1500 blocked for more than 120 seconds. 
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. 
syslogd D 0000000000000110 0 1500 1 1503 1491 (NOTLB) 
 ffff8800b0739d88 0000000000000286 ffff8800b8922970 ffff8800b8922970 
 0000000000000009 ffff8800bb2dd0c0 ffff8800baa55080 0000000000002b40 
 ffff8800bb2dd2a8 0000000000000000 
Call Trace: 
 [] :jbd:log_wait_commit+0xa3/0xf5 
 [] autoremove_wake_function+0x0/0x2e 
 [] :jbd:journal_stop+0x1cf/0x1ff 
 [] __writeback_single_inode+0x1d9/0x318 
 [] do_readv_writev+0x26e/0x291 
 [] sync_inode+0x24/0x33 
 [] :ext3:ext3_sync_file+0xcc/0xf8 
 [] do_fsync+0x52/0xa4 
 [] __do_fsync+0x23/0x36 
 [] tracesys+0xab/0xb6

Se isto é o que está acontecendo, você terá que encontrar alguma maneira de tornar as gravações menos desgastantes, estrangulá-las ou armazená-las em cache, ou talvez mudando o agendador de disco para noop ou ... etc. jogar memória nesta edição ajudará porque o sistema será capaz de tolerar maiores picos de memória "suja" antes de congelar.

    
por 02.05.2012 / 17:32
1

Algumas coisas você pode tentar obter mais informações:

  • Se você acha que seu servidor está travando completamente, você pode obter informações de netconsole se por algum motivo você não tiver acesso ao console padrão.

  • Se você estiver executando o Asterisk com o sinalizador -p e ele estiver fazendo o livelocking do sistema, tente criar um novo shell ssh como: # for pid in 'pidof sshd'; do chrt -p -f 99 $pid; done

  • Você também pode tentar definir as seguintes opções para que ele seja reinicializado automaticamente se o kernel detectar um problema: # sysctl -w kernel.panic_on_oops=1; sysctl -w kernel.panic=1; sysctl -w kernel.softlockup_panic=1 .

por 02.05.2012 / 22:46