Projecte

General

Perfil

Accions

Tasca #1110

tancat
FJ FJ

Resoldre els conflictes entre els robots i el backup nocturn

Tasca #1110: Resoldre els conflictes entre els robots i el backup nocturn

Afegit per Ferran Jorba fa aproximadament 15 anys. Actualitzat fa aproximadament 6 anys.

Estat:
Tancada
Prioritat:
Normal
Assignat a:
Categoria:
-
Inici:
Data de venciment:
Paraula clau:

Descripció

Més o menys un parell de cops a la setmana, rebo un munt de missatges d'aquest tipus:


The following problem occurred on <http://ddd.uab.cat>

>>> Registered exception

2011-02-18 05:28:16 -> OperationalError: (1040, 'Too many connections')

>>> User details

       agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) Speedy Spider

              (http://www.entireweb.com/about/search_tech/speedy_spider/)

apache_group: []

 apache_user: None

       email: 

       group: []

       guest: 1

  last_login: 1970-01-01 00:00:00

    nickname: 

     referer: <>

 remote_host: 

   remote_ip: 88.131.106.7

         uid: 0

         uri: </record/53068?of=XT>

>>> Traceback details

Forced traceback (most recent call last)

  File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line 1229, in _process_target

    result = _execute_target(config, req, object, arg)

  File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line 1128, in _execute_target

    result = object(arg)

  File "/home/ddd/lib/python/invenio/webinterface_handler.py", line 298, in _profiler

    return _handler(req)

Traceback (most recent call last):

  File "/home/ddd/lib/python/invenio/webinterface_handler.py", line 316, in _handler

    return root._traverse(req, path)

  File "/home/ddd/lib/python/invenio/webinterface_handler.py", line 210, in _traverse

    result = _check_result(req, obj(req, form))

  File "/home/ddd/lib/python/invenio/websearch_webinterface.py", line 311, in __call__

    (auth_code, auth_msg) = check_user_can_view_record(user_info, self.recid)

  File "/home/ddd/lib/python/invenio/search_engine.py", line 213, in check_user_can_view_record

    record_primary_collection = guess_primary_collection_of_a_record(recid)

  File "/home/ddd/lib/python/invenio/search_engine.py", line 2370, in guess_primary_collection_of_a_record

    dbcollids = get_fieldvalues(recID, "980__a")

  File "/home/ddd/lib/python/invenio/search_engine.py", line 2431, in get_fieldvalues

    res = run_sql(query)

  File "/home/ddd/lib/python/invenio/dbquery.py", line 231, in run_sql

    db = _db_login(relogin = 1)

  File "/home/ddd/lib/python/invenio/dbquery.py", line 110, in _db_login

    use_unicode=False, charset='utf8')

  File "/var/lib/python-support/python2.5/MySQLdb/__init__.py", line 74, in Connect

    return Connection(*args, **kwargs)

  File "/var/lib/python-support/python2.5/MySQLdb/connections.py", line 170, in __init__

    super(Connection, self).__init__(*args, **kwargs2)

OperationalError: (1040, 'Too many connections')

Els missatges són entre les 5 i les 6 de la matinada, i quan passa, el sistema envia entre 500 i 1500 missatges amb errors com l'anterior.

En aquesta tasca anirem apuntant quan passa, per veure quina solució hi trobem:

  • 2011-02-17 (dijous) de 05:10 a 05:26
  • 2011-02-18 (divendres) de 05:21 a 05:28
  • 2011-02-24 (dijous) de 05:22 a 05:29, 190 missatges
  • 2011-02-25 (divendres) de 05:10 a 05:26, 3631 missatges
  • 2011-02-28 (dilluns) de 13:13 a 13:15, 98 missatges
  • 2011-03-01 (dimarts) de 05:26 a 05:28, 54 missatges
  • 2011-03-02 (dimecres) de 05:24 a 5:28, 54 missatges
  • 2011-03-08 (dimarts) de 05:12 a 5:29, 2663 missatges
  • 2011-03-09 (dimecres) de 05:12 a 5:28, 2344 missatges
  • 2011-03-10 (dijous) de 05:18 a 5:29, 1742 missatges
  • 2011-03-11 (divendres) de 05:10 a 5:36, 2873 missatges
  • 2011-03-15 (dimarts) de 05:13 a 05:21, 537 missatges

2011-03-16 (dimecres): canvi del backup amb el gzip en el moment del mysqldump i al /var.

  • 2011-03-20 (diumenge) de 05:21 a 05:31, 288 missatges
  • 2011-03-22 (dimarts) de 05:16 a 05:24, 2222 missatges
  • 2011-03-23 (dimecres) de 05:11 a 05:13, 108 missatges
  • 2011-03-24 (dijous) de 05:20 a 05:31, 600 missatges
  • 2011-03-25 (divendres) de 05:19 a 5:31, 672 missatges
  • 2011-03-26 (dissabte) de 05:20 a 05:31, 662 missatges
  • 2011-03-27 (diumenge) de 05:15 a 05:31, 876 missatges
  • 2011-03-29 (dimarts) de 05:15 a 05:31, 814 missatges
  • 2011-03-30 (dimecres) de 03:00 a 03:14, 993 missatges i de 05:21 a 05:27, 1710 missatges
  • 2011-03-31 (dijous) de 05:25 a 05:31, 269 missatges
  • 2011-04-01 (divendres) de 05:17 a 05:26, 580 missatges
  • 2011-04-02 (dissabte) de 05:17 a 07:12, 451 missatges
  • 2011-04-03 (diumenge) de 05:15 a 05:31, 919 missatges
  • 2011-04-04 (dilluns) de 05:14 a 05:31, 1237 missatges
  • 2011-04-05 (dimarts) de 05:15 a 05:29, 797 missatges

FJ Actualitzat per Ferran Jorba fa aproximadament 15 anys Accions #1

Si no trobem cap solució alternativa, sempre podem tirar de l'opció Visit-time del fitxer robots.txt, com aquest exemple a http://en.linuxreviews.org/Robots.txt:


User-agent: *

Disallow: /trap/

Request-rate: 1/5         # maximum rate is one page every 5 seconds

Visit-time: 0600-0845     # only visit between 6:00 AM and 8:45 AM UT (GMT)

FJ Actualitzat per Ferran Jorba fa aproximadament 15 anys Accions #2

Estic pensant que això potser es pot solucionar quan fem el gzip en el moment del mysqldump. Hem d'acabar de pulir-ho a Nuix per després replicar-ho a Homs.

FJ Actualitzat per Ferran Jorba fa aproximadament 15 anys Accions #3

A part del gzip en el moment del backup, probablement canviant alguns paràmetres de Mysql també podríem solucionar-ho.

FJ Actualitzat per Ferran Jorba fa aproximadament 15 anys Accions #4

Al DDD de proves ja fem el backup de mysql simultànament amb el gzip. El temps de backup és idèntic, tot i que jo pensava que seria menor. En tot cas, la base de dades de proves, com que no inclou l'índex de text complet, és molt més petit que el DDD públic (938 MB en comptes de 1.7 GB); potser en l'altre hi trobem millora en el rendiment.

FJ Actualitzat per Ferran Jorba fa més de 14 anys Accions #5

Encara no hem trobat una solució, i temporalment farem aquesta. Donat que l'hora UTC és dues menys que la nostra, i que els errors els trobem entre 5:00 i 6:00, que serien 3:00 a 4:00 UTC:


User-agent: *

Disallow: /uab

Visit-time: 0400-2345     # only visit between 4:00 and 23:45 UTC (GMT)

FJ Actualitzat per Ferran Jorba fa més de 14 anys Accions #6

Això del Visit-time sembla que els robots de Google ho ignoren, i recomanen que el servidor retorni un missatge d'error 503 (Temporary unavailable):

He fet una modificació perquè retorni aquest 503 en el cas que ens ocupa, però no estic segur d'haver-ho fet bé. Ens esperarem uns dies, a veure si funciona.

FJ Actualitzat per Ferran Jorba fa més de 14 anys Accions #7

  • Estat ha canviat de Creada a Tancada

FJ Actualitzat per Ferran Jorba fa més de 14 anys Accions #8

Funciona!

CA Actualitzat per Cristina Azorin fa aproximadament 6 anys Accions #9

  • Tipus de tasca ha canviat de Defecte a Tasca
Accions

També disponible a: PDF Atom