Incrementar conexões simultâneas do CouchDB

1

Estou usando o CouchDB para atender milhares de solicitações por segundo. Quando sob carga pesada, parece responder lentamente, então comecei a fazer testes com o banco apache. O sofá pode responder a 50k solicitações, 1k simultâneas. Em seguida, aumentei a simultaneidade para 2k, mas o benchmark está sempre quebrado em torno de 8k solicitações com a mensagem:

apr_socket_recv: Connection reset by peer (104)

No log do CouchDb, posso encontrar esses dois erros:

[Sat, 21 Nov 2015 17:16:07 GMT] [error] [<0.8073.2>] {error_report,<0.31.0>,
                      {<0.8073.2>,crash_report,
                       [[{initial_call,
                          {mochiweb_acceptor,init,
                           ['Argument__1','Argument__2','Argument__3']}},
                         {pid,<0.8073.2>},
                         {registered_name,[]},
                         {error_info,
                          {exit,
                           {error,accept_failed},
                           [{mochiweb_acceptor,init,3,
                             [{file,"mochiweb_acceptor.erl"},{line,34}]},
                            {proc_lib,init_p_do_apply,3,
                             [{file,"proc_lib.erl"},{line,239}]}]}},
                         {ancestors,
                          [couch_httpd,couch_secondary_services,
                           couch_server_sup,<0.32.0>]},
                         {messages,[]},
                         {links,[<0.105.0>]},
                         {dictionary,[]},
                         {trap_exit,false},
                         {status,running},
                         {heap_size,233},
                         {stack_size,27},
                         {reductions,330}],
                        []]}}

// and this:

[Sat, 21 Nov 2015 17:11:54 GMT] [error] [<0.105.0>] {error_report,<0.31.0>,
                        {<0.105.0>,std_error,
                         {mochiweb_socket_server,297,
                             {acceptor_error,{error,accept_failed}}}}}

Infelizmente, não entendo o que eles significam.

O que eu fiz até agora tentando incrementar recursos para o CouchDB:

  • Gerou o limite de descritores de arquivo para 250k, tanto hard quanto soft
  • Gerou "Limites de recursos do sistema" conforme descrito aqui :
    • export ERL_MAX_PORTS=8192 < - embora isso seja obsoleto, acho
    • export ERL_MAX_ETS_TABLES=6000
    • export ERL_FLAGS="+Q 350000 +P 750000 +A 100"
  • Gerou quase todos os valores na configuração do CouchDB
  • Eu também li algo sobre portas sendo em TIME_WAIT, mas depois de um benchmark parece ser apenas 280 portas nesse estado

E nada funcionou.

Para esses testes, estou usando uma VM com:

  • Ubuntu 14.04.2
  • CouchDB 1.5.0
  • Erlang R16B03 (erts-5.10.4)
por Parziphal 12.11.2015 / 07:57

1 resposta

1

O Kxepal do CouchDb me conectou a este e-mail , onde está escrito:

One common gotcha with limits.conf is that couchdb su's to the couchdb user and /etc/pam.d/su in debian/ubuntu defaults to not respecting limits.conf, you need to enable it.

Então, eu fiz vim /etc/pam.d/su e encontrei:

# Sets up user limits, please uncomment and read /etc/security/limits.conf
# to enable this functionality.
# (Replaces the use of /etc/limits in old login)
#session    required   pam_limits.so

Eu descomentei a última linha, reiniciei a VM e o CouchDB agora suporta tantas solicitações simultâneas quanto eu desejava. Estava ignorando a configuração dos limites o tempo todo.

Eu também aprendi / percebi que o que realmente requer muitos descritores de arquivos é o benchmark em si, não o serviço a ser testado. Talvez eu deva fazer benchmark de uma VM diferente.

    
por 10.12.2015 / 21:22