1

私は python+django+fastcgi(flup)+mysql+redis で構築された Web サービスを持っています。

ただし、常に例外が発生することがありますOperationalError: (2001, "Can't create UNIX socket (24)")ConnectionError: Error 24 connecting 10.160.94.231:6379. Too many open files.

ログ ファイルは次のように表示されます。

2012-08-19 12:36:36,322 ERROR Internal Server Error: /xxxx
Traceback (most recent call last):
  File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 111, in get_response
  File "/xxxxxx/push_notifi/models.py", line 60, in get_device_token
  File "/usr/lib/python2.6/site-packages/redis-2.4.12-py2.6.egg/redis/client.py", line 773, in sadd
  File "/usr/lib/python2.6/site-packages/redis-2.4.12-py2.6.egg/redis/client.py", line 283, in execute_command
  File "/usr/lib/python2.6/site-packages/redis-2.4.12-py2.6.egg/redis/connection.py", line 260, in send_command
  File "/usr/lib/python2.6/site-packages/redis-2.4.12-py2.6.egg/redis/connection.py", line 243, in send_packed_command
  File "/usr/lib/python2.6/site-packages/redis-2.4.12-py2.6.egg/redis/connection.py", line 191, in connect
ConnectionError: Error 24 connecting 10.160.94.231:6379. Too many open files.
2012-08-19 12:38:54,942 ERROR Internal Server Error: xxxxx
Traceback (most recent call last):
  File "/usr/lib/python2.6/site-packages/django/core/handlers/base.py", line 111, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/xxxxxx/users_stat/views.py", line 85, in receiver
    saveUser(user)
  File "/xxxxxx/users_stat/models.py", line 86, in saveUser
  File "/xxxxxxx/users_stat/models.py", line 46, in syncVersionToPushService
  File "/xxxxxxx/utility/db_access.py", line 37, in execNonQuery
  File "/usr/lib/python2.6/site-packages/MySQLdb/__init__.py", line 81, in Connect
  File "/usr/lib/python2.6/site-packages/MySQLdb/connections.py", line 187, in __init__
OperationalError: (2001, "Can't create UNIX socket (24)")

何らかのファイル記述子のリークが原因である可能性があると思いますが、私はredis.Redisredis を接続し、redis 接続タイムアウトを 100 秒に設定していました。

mysql接続では、各クエリの後にcursor.close()andを呼び出しました。db.close()fdリークがどこで発生するのか本当にわかりません。

もチェックcat /proc/sys/fs/file-nrしましたが、常に十分なファイル記述子があります。お気に入り:

2272    0   170019

それについて何か考えはありますか?

4

0 に答える 0