|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
Привет всем! Возникла такая штуковина. Есть сервер Firebird, есть прога, которая создает кучу коннектов к нему (порядка 200), используется дотнетовая FirebirdSql.Data.FirebirdClient.dll. Каждый коннект - в своем потоке, делает различные запросы (имитируется работа этих самых 200 человек). В процессе работы каждого "человека" (т.е. потока) возможны действия: 1. Подключение/отключение к БД. 3. Старт/откат/коммит транзакции. 5. Запрос. На небольшом числе коннектов все работает нормально - пришлось только увеличить на сервере лимит подключений с одного ip (иначе после 30 коннектов выдавалось "reject connection"). Но теперь другая проблема: спустя пару минут работы выдается исключение timeout exceeded. Удалось установить, что явной зависимости от числа коннектов - нет. Если запустить 200 - то ошибка просто возникнет быстрее, чем на 150. На всякий случай, привожу код. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70.
Пробовал и по-другому: писать fbConnection = new FbConnection(fbConString); в конструкторе, fbConnection.Dispose(); только в public void Dispose() - эффект такой же. Буду очень признателен за помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 11:03 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
Дополнение: заметил, что если запустить одно приложение и 100 коннектов - то валится эксепшен, но если 2 экземпляра приложения по 50 коннектов - то не валится. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 11:48 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
TopSpaceпришлось только увеличить на сервере лимит подключений с одного ip это как? TopSpaceУдалось установить, что явной зависимости от числа коннектов - нет. Если запустить 200 - то ошибка просто возникнет быстрее, чем на 150. Classic, SuperServer? Код ошибки в коде обрабатывается? В какой именно момент ошибка проявляется? Памяти сколько все это жрет, в виртуал ничего не вываливается? Тредов столько же сколько коннектов? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 11:58 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
kdvTopSpaceпришлось только увеличить на сервере лимит подключений с одного ip это как? Я точно не знаю, это админы настраивали. Есть некие настройки сервера Firebird 2.5, в том числе - лимит подключений с одного ip (по умолчанию 30). kdvTopSpaceУдалось установить, что явной зависимости от числа коннектов - нет. Если запустить 200 - то ошибка просто возникнет быстрее, чем на 150. Classic, SuperServer? Код ошибки в коде обрабатывается? В какой именно момент ошибка проявляется? Памяти сколько все это жрет, в виртуал ничего не вываливается? Тредов столько же сколько коннектов? Увы, я в БД слабо разбираюсь, может быть ответ на вопрос Classic/SuperServer можно найти из того, как формируется connection string? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Ошибка, как я понимаю, проявляется при fbConnection.Open(); - бросается исключение: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Прога отъедает всего-то метров 20 оперативы. Да, каждый коннект - отдельный тред. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:11 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
TopSpaceЕсть некие настройки сервера Firebird 2.5, в том числе - лимит подключений с одного ip (по умолчанию 30). то есть, на сервере линукс? TopSpaceУвы, я в БД слабо разбираюсь, может быть ответ на вопрос Classic/SuperServer можно найти из того круто. работаете с сервером, и не знаете, что это такое. Из строки коннекта, разумеется, нельзя понять архитектуру сервера. Да и вы строку коннекта и не указали. По ней разве операционную систему сервера можно определить. TopSpaceОшибка, как я понимаю, проявляется при fbConnection.Open(); - бросается исключение: нужно еще смотреть логи на сервере. И вообще, как там сервер. Как я понимаю, это не ваша задача? Тупик, однако. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:16 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
В Firebird нет исключения с текстом "timeout exceeded". Так что либо ты его неправильно переписал, либо это проблема в .NET провайдере. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:20 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
kdvэто как? Linux Classic. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:21 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
kdvто есть, на сервере линукс? Да, вроде там centos. kdvкруто. работаете с сервером, и не знаете, что это такое. Из строки коннекта, разумеется, нельзя понять архитектуру сервера. Да и вы строку коннекта и не указали. По ней разве операционную систему сервера можно определить. Да, приходится на ходу разбираться с совершенно незнакомой областью программирования) kdvнужно еще смотреть логи на сервере. И вообще, как там сервер. Как я понимаю, это не ваша задача? Тупик, однако. Логи посмотрим конечно, но в целом можно ли сказать, отчего вообще бывает такой эксепшен? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:23 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
а фиг знает. вдруг там классик, а на сервере памяти не хватает, все выпадает в виртуал, и таймауты возникают. Как пример. Или в операционке что-то. И т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:26 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
kdv, кстати, у формирователя connectionString есть любопытные параметры: cs.ServerType = FbServerType.Embedded; cs.ClientLibrary = ... В зависимости от того, что указано в первом, требуется или не требуется fbclient.dll во втором (сейчас у меня все работает без нее) - может это имеет значение? Плюс вот такие говорящие названия, может имеет смысл ими поиграться? cs.ConnectionTimeout cs.IsolationLevel cs.Pooling cs.MaxPoolSize cs.ConnectionLifeTime ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:32 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, ну да, исключение выдает .net provider, просто непонятно куда копать, чтобы понять причину) Т.е. какой тип/настройки сервера наиболее тут уместны. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:37 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
TopSpaceкстати, у формирователя connectionString есть любопытные параметры: cs.ServerType = FbServerType.Embedded; нельзя работать с сервером, не имея о нем никакого представления. читайте faq http://www.ibase.ru/ibfaq.htm#embedded у вас никакой не embedded, и опять вы не в состоянии привести строку коннекта. TopSpaceможет это имеет значение? см. выше. TopSpaceПлюс вот такие говорящие названия, может имеет смысл ими поиграться? может быть. ничего не могу сказать, меня .Net не интересует абсолютно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:39 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
TopSpaceпросто непонятно куда копать, чтобы понять причину Провайдер идёт с исходниками. Лезь в них, ищи место где это исключение выбрасывается, смотри почему. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:39 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
Еще, чтоб не создавать отдельной темы вопрос: если провести 2 раза идентичные нагрузочные испытания, т.е. 10 минут слать на сервер запросы, потом тест повторить (восстановив перед этим из бэкапа ту же базу, на всякий случай) - совпадут ли графики в Zabbix? И вообще, как можно оценить по Zabbix'у, справляется ли сервер с запросами? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:41 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
Спасибо всем за советы, почитаю, и гляну в исходники (судя по стек трейсу - что-то в ConnectionPool). Но и предварительные результаты интересны, выставил такие настройки коннекта: cs.ConnectionTimeout = 10000000; cs.IsolationLevel = System.Data.IsolationLevel.ReadCommitted; cs.MaxPoolSize = 1000000; cs.ConnectionLifeTime = 100000; На всякий случай с запасом) Прога стреляет запросы на 200 человек уже 10 минут - пока не падает, уже прогресс)) Ощущение такое, что все дело в этом самом timeout, но без знания матчасти не могу пока сообразить что именно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:45 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
- по параметрам должна быть справка. - с .net тут мало кто работает, да и слово zabbix за всю жизнь этого раздела ни разу не упоминалось - восстановление из бэкапа не должно влиять на результат (разве что в самых запущенных случаях) - справляется-ли сервер с запросами - нужно смотреть на сервере. Если для вас он черный ящик, то вы не поймете причину таймаутов по коннектам. Могут быть банальные глюки сети на стыке Windows-Linux. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 12:48 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
TopSpacecs.IsolationLevel = System.Data.IsolationLevel. ReadCommitted ; Плохой выбор. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 13:30 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
DSПлохой выбор. кстати, да, если в драйвере так этот косяк и не исправили. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2011, 13:35 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
kdvDSПлохой выбор. кстати, да, если в драйвере так этот косяк и не исправили. А что там за косяк с ReadCommited? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2011, 00:32 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
metaclassА что там за косяк с ReadCommited? а он с no_rec_version. автор драйвера не соображает, хотя ему неоднократно не только намекали, но и писали в трекер http://tracker.firebirdsql.org/browse/DNET-337 В результате до сих пор правильным является ReadUncommitted, а неправильным - ReadCommitted. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2011, 00:40 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
kdvDSПлохой выбор. кстати, да, если в драйвере так этот косяк и не исправили. если это про no record version - то таки не исправили: Код: plaintext 1. 2. 3. 4. 5.
в результате для ReadCommitted получается write wait read_commited no_rec_version ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2011, 00:41 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
ага. и получается маразм - кто напарывается, жалуется на ФБ. или не жалуется, а молча забивает. И так оно неисправлено висит уже несколько лет, если не ошибаюсь. В ODBC тоже был аналогичный загиб, но его исправили недавно. Вывод - драйверописатели .Net и ODBC не работают с FB. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2011, 00:46 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
Нашел в исходниках .net provider это место, где выдается исключение: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
Соответственно, поставил в настройках коннекта: cs.MaxPoolSize = 200; Падать перестало, прога раздувается в памяти до 34 метров и виснет! Почему - непонятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2011, 10:12 |
|
Многопоточная нагрузка сервера - timeout exceeded exception
|
|||
---|---|---|---|
#18+
kdvВ результате до сих пор правильным является ReadUncommitted Не советуй плохого. Правильным является Snapshot (или во что там у точко-нетчиков отображается concurrency). Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2011, 13:09 |
|
|
start [/forum/topic.php?fid=40&msg=37313867&tid=1562649]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 249ms |
total: | 399ms |
0 / 0 |