24.02.2012, 00:52
|
Новичок на форуме
|
|
Регистрация: 14.02.2012
Сообщений: 9
|
|
Websockets проблемы с памятью.
Всем здравствуйте!
Вот необходимо мне для проекта использовать websockets. Реализую я доступ к ним с помощью dojo, серверный язык - php 5.3.5... apache 2.2.20
Сначала вроде бы все работает нормально. Но если подержать приложение часок другой включенным, то можно заметить, что занят большой объем оперативной памяти именно этим процессом (смотрю по монитору ресурсов). И эта память продолжает угрожающе расти.
Из-за чего это происходит и можно ли от этого как-нибудь избавиться?
Заранее спасибо!
Последний раз редактировалось luxor1992, 24.02.2012 в 01:59.
|
|
24.02.2012, 10:36
|
Профессор
|
|
Регистрация: 07.06.2011
Сообщений: 315
|
|
попробуйте оптимизировать код
|
|
24.02.2012, 12:21
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
luxor1992,
на сервере или в клиенте растёт память?
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
24.02.2012, 18:19
|
Новичок на форуме
|
|
Регистрация: 14.02.2012
Сообщений: 9
|
|
В общем по всякому тестировал, убирал то одни, то другие куски,
выяснил, что утечка происходит на клиенте и, скорее всего, не из-за вебсокетов, точнее вебсокеты могут только ухудшать утечку, но не являться главной её причиной.
|
|
25.02.2012, 11:17
|
Новичок на форуме
|
|
Регистрация: 14.02.2012
Сообщений: 9
|
|
Выяснил, что утечку вызывают вовсе не вебсокеты,
а метод updateSeries и render диаграммы, которую я обновляю "онлайн".
можете что-нибудь подсказать? Это ошибка в реализации updateSeries или моя лажа?
setInterval(function repetition() {
newData1 = 10000;
for (var i = 0; i < dataLineChart.length - 1; i++) {
dataLineChart[i] = dataLineChart[i+1];
}
dataLineChart[dataLineChart.length - 1] = newData1;
lineChart.updateSeries("Line", dataLineChart);
lineChart.render();
newData2[0] = 2000; newData2[1] = 3000; newData2[2] = 6000; newData2[3] = 10000;
for (var i = 0; i < dataLineChart.length; i++) {
dataBarChart[i] = newData2[i];
}
barChart.updateSeries("Bar", dataBarChart);
barChart.render();
}, 1);
Данные массива тестовые, не обращайте внимания.
|
|
25.02.2012, 13:13
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
luxor1992,
На интервал таймера посмотрели бы хоть. Самая явная проблема.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
25.02.2012, 13:38
|
Новичок на форуме
|
|
Регистрация: 14.02.2012
Сообщений: 9
|
|
Может я чего не понимаю, но причем здесь интервал? Ну пусть будет 100.
Память будет заполняться просто медленнее, но так же верно и неотвратимо.
Я поставил 1, чтобы эффект быстрее был виден. Чтобы ради тестирования не приходилось по полчаса сидеть перед монитором, чтобы наконец убедиться, что memory leak присутствует.
На других форумах/сайтах речь идет вообще о неправильной реализации render() в 1.7
например, вот здесь: http://bugs.dojotoolkit.org/ticket/14589
|
|
25.02.2012, 13:58
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
luxor1992,
Здесь нет экстрасенсов, что бы узнать, что находится в тех функциях которые могут утекать. Если вы знаете причину, можете попробовать устранить её, всем будет полезно.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
25.02.2012, 14:03
|
Новичок на форуме
|
|
Регистрация: 14.02.2012
Сообщений: 9
|
|
Эти функции находятся в общем доступе на оф. сайте dojo.
В общем, неважно, попробую решить проблему сам.
Но буду рад, если есть еще какие-нибудь соображения по этому поводу!
|
|
|
|