Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Internet Explorer + Flash Player + IE Skype Add-on = Memory Leak

Adobe Flash
В течении нескольких лет мы (anychart.com) периодически получаем баг-репорты, суть которых сводится к тому, что память в Internet Explorer 6/7 (и Flash Player 9/10 в нем) ужасно течет при рефреше страницы. Долго и упорно мы пытались найти решение этой проблемы, теряли клиентов, не спали ночами. Со временем IE + Flash Player стали моим ночным кошмаром. Мы материли и Adobe и Microsoft, но никак не могли подумать, что они тут не при чем.
Сегодня случилось чудо. При очередном тесте на двух одинаковых машинах появилась разница — на одной утечка памяти была, на другой нет. Долгий и упорный brainstorming нашел корень всех зол. Им оказался… Internet Explorer Skype add-on!

-----
Update:
Со мной связались из скайпа. Добовление к посту
Peter Kalmström, PM Skype Toolbars:
1. This is how you disable only the add-on www.screencast.com/t/BrlWxmckTd3. We don't want users removing Skype
2. We are working closely with Skype to get a fix out asap — watch this space!
-----
One more update:
Пост на английском в нашем блоге: www.anychart.com/blog/2009/07/27/anychart-has-discovered-bug-in-skype-skype-promises-to-fix-it-asap-2

Далее были проведены эксперименты, которые показали, что при установленном Skype add-on-е память растет при каждом рефреше/закрытии страницы с ЛЮБОЙ! swf-кой.

Итак, подтверждение диагноза.
Читать дальше →
Всего голосов 74: ↑70 и ↓4 +66
Просмотры2.1K
Комментарии 37

Боремся с утечками памяти (C++ CRT)

C++
Утечка памяти — довольно серьезная и опасная проблема. Быть может, пользователь и не заметит однократной утечки каких-нибудь 32Кб памяти (а ведь это целые 5% от 640Кб, которых «хватит всем»), но постоянно теряя сложные иерархические структуры или массивы размером больше INT_MAX (которые мы так любим создавать на 64-битной архитектуре) мы обречем его на страдания, а наш продукт на провал.

Не допускать ситуации вроде бы и не трудно — воспользуемся правилом «класть на место всё что взяли», но на практике это сильно осложняется человеческим фактором (банальная невнимательность), хитростью архитектуры и нелинейным порядком выполнения операторов, например, из-за применения исключений.

А можно было бы просто «отдаться» автоматическому сборщику мусора, ценой потери производительности (и это не обязательно Managed C++, для Native C++ / C есть библиотеки сборки мусора, вот, например).

Но мы поговорим о ситуации когда уже «всё плохо».
Читать дальше →
Всего голосов 51: ↑41 и ↓10 +31
Просмотры57.4K
Комментарии 45

Охота на утечки

Чулан
В даном посте я описал свой опыт борьбы с одной конкретной утечкой в большом проекте. Было допущено много ошибок, но может кому то будет полезно.

Давно не сталкивался с утечками памяти, но на днях наш плюсовый демон начал течь. При чем valgrind.memcheck не показывает ничего внятного — сервер долго стартует, большую нагрузку дать не получается — watchdog, который проверяет на зависание сервера при такой нагрузке под валгриндом — резво прибивает сервер.При выходе из под маленькой нагрузке — ликов нет.
Течет сильно — 7 гигов за 3 дня. Хотя раньше в рабочем режиме больше 1 гига не требовал (был запущен и по 2 недели без перезапусков).

Читать дальше →
Всего голосов 7: ↑5 и ↓2 +3
Просмотры814
Комментарии 17

Утечки памяти в С++: Visual Leak Detector

C++
В этой короткой заметке хочу рассказать о прекрасной программе для поиска утечек памяти под Visual Studio--Visual Leak Detector.
Она удивительно проста в использовании и выдает подробную информацию о найденных утечках, а на хабре пока не упоминалась.
Читать дальше
Всего голосов 39: ↑34 и ↓5 +29
Просмотры33.9K
Комментарии 18

Анализ памяти для Android приложений

Разработка под Android
Перевод
В Dalvik есть сборщик мусора, но это не значит, что можно игнорировать управление памятью. Даже наоборот — нужно быть особенно внимательным при использовании памяти, которая, как известно, на мобильных устройствах ограничена. В этой статье будут рассмотрены инструменты, которые значительно помогают следить за тем, как приложение использует память.
Читать дальше →
Всего голосов 64: ↑61 и ↓3 +58
Просмотры39.4K
Комментарии 19

Отслеживание утечек памяти в Android приложениях

Разработка под Android
На самом деле, данная статья является продолжением данного топика: Анализ памяти для Android приложений. Всем, кто хочет изучить вопрос детально, будут рады под катом.
Читать дальше →
Всего голосов 27: ↑23 и ↓4 +19
Просмотры8.1K
Комментарии 13

Об утечках памяти в iOS и методах борьбы с ними

Скрипт
Среди проектов, над которыми мы работаем, пожалуй, нет ни одного, в котором было бы всё в порядке с памятью. Этот пост я посвящу рассказу о том, как бороться с данным видом проблем.

К проблемам с памятью можно отнести утечки и так называемых «зомби». Приложение, в котором творится бардак с памятью, становится нестабильным, в нём появляется целый букет странностей, начинаяя с пропадания некоторых элементов интерфейса и заканчивая падениями.

Для начала давайте определимся, что такое утечки. Утечки — выделенные, но не освобождённые области памяти, на которые нет указателя. Всё это выглядит достаточно несерьёзно, у iPhone куча оперативной памяти, а обычное приложение занимает в лучшем случае 2 Мб. На деле всё не так радужно: приложение может использовать до 3мб, а дальше начинают возникать memory warning, соответственно, ОС пытается освободить те области, которые считает «ненужными». Попросту говоря, удаляет невидимые в данный момент элементы интерфейса, а это не только некрасиво, но и может привести к падению приложения. «Зомби» — уже освобождённые (убитые) области памяти, к которым пытается обратиться программа, что также приводит к падению приложения.
Читать дальше →
Всего голосов 15: ↑8 и ↓7 +1
Просмотры5.8K
Комментарии 2

Отчёт о встрече ADCSpb #4 + видео докладов

e-Legion
19 апреля 2011 года искусственный разум Skynet решил уничтожить человеческую расу, и пока любители посидеть в баре ждали голого человека с просьбой немедленно предоставить одежду и мотоцикл, мы собрались в тёплом и уютном бизнес-инкубаторе «Ингрия», чтобы провести очередную, четвёртую по счёту, встречу Apple-разработчиков.

image

Тематикой для технических докладов была выбрана тема Управления памятью. На четвёртой встрече выступили:
  • Денис Марголин с общим докладом «PostPC world»;
  • Станислав Краснояров с техническим докладом «Поиск утечек памяти с помощью Instruments»;
  • Григорий Бутейко с техническим докладом «Работа с памятью без использования Instruments».
Видео докладов и полный отчёт
Всего голосов 28: ↑25 и ↓3 +22
Просмотры2.4K
Комментарии 3

Типичные случаи утечки памяти в Java

Java
Из песочницы
Большинству разработчиков известно, что сборщик мусора в Java не является универсальным механизмом, позволяющим программисту полностью забыть о правилах использования памяти и о том, в каких случаях осуществляется его работа. Ниже описаны типичные случаи утечки памяти в java-приложениях, встречающиеся повсеместно.
Итак, о чём должен помнить каждый java-программист.
Читать дальше →
Всего голосов 113: ↑104 и ↓9 +95
Просмотры66.6K
Комментарии 80

Побеждаем утечки памяти и ускоряем работу Firefox

Firefox
Про утечки памяти в Огнелисе на Хабре уже было несколько постов, но ни в одном из них нет полного, с моей точки зрения, набора инструкций. Под катом я попытаюсь собрать все вместе, добавив то, что помогло в решении вопроса мне.

Кроме решения проблемы утечки памяти, многие советы позволят ускорить работу браузера, так что пост будет интересен всем, кто использует Firefox. Практически каждый пункт подходит и для почтового клиента Thunderbird.

А если вам просто понравилась девушка с картинки, то здесь хайрез :)

Читать дальше →
Всего голосов 132: ↑96 и ↓36 +60
Просмотры199.5K
Комментарии 111

Вся правда о вертикальном масштабировании в PaaS и почему Вы переплачиваете за обычный хостинг

Jelastic
Как известно, приложение не всегда использует одинаковое количество ресурсов, но благодаря функции автоматического вертикального масштабирования, в Jelastic изменяется размер контейнера под приложение. Соответственно пользователю не нужно переплачивать за зарезервированные ресурсы, которые не используются, как в случае с другими PaaS. Ведь действительно, бизнес-модель всей хостинговой индустрии и старого поколения PaaS решений основана на «overselling». Таким образом, важность справедливой оплаты за фактическое потребление ресурсов очевидна.

imageПонятное дело, что в то время, когда разрабатывали JVM, никто не знал об облаках или виртуализации, и, тем более, никто даже не задумывался о плотности в PaaS. Сегодня виртуализация изменила ход игры в хостинговой индустрии, и эта революция будет продолжаться. Теперь мы можем более эффективно использовать ресурсы. Майкл Видстендт, один из главных архитекторов JVM в Oracle, подтвердил, что JVM совсем не предназначена для PaaS, но Oracle делает все возможное, чтобы изменить это. Плюс ребята из IBM двигаются в том же направлении. Некоторые примечания о динамическом поведением JVM можно найти в IBM JavaOne Keynote 2012 Highlights.
Читать дальше →
Всего голосов 26: ↑21 и ↓5 +16
Просмотры8.9K
Комментарии 15

Smart pointers для начинающих

ПрограммированиеC++
Из песочницы
Эта небольшая статья в первую очередь предназначена для начинающих C++ программистов, которые либо слышали об умных указателях, но боялись их применять, либо они устали следить за new-delete.
Читать дальше →
Всего голосов 74: ↑67 и ↓7 +60
Просмотры160.2K
Комментарии 44

F# Хвостовая рекурсия. Подводные грабли. Часть 1

Разработка веб-сайтовПрограммирование.NETF#

Винни Пух: Ой, что это случилось с твоим хвостом?
Иа: А что с ним могло случится?
Винни Пух: Его нет.
Иа: Ты не ошибся?
Винни Пух: Хвост или есть или нет совсем! Тут нельзя ошибиться.
Иа: А что же тогда там есть?
Винни Пух: Ничего!


У нас в проекте, в одном из серверных компонентов, после очередного рефакторинга начала течь память. Казалось бы .NET, F#, менеджед код, сборка мусора, все дела, но память, куда-то утекала. Ценой бессонных ночей и попорченных нервов, источник утечки был найден. Оказалось что проблема вызвана куском кода, который был, чуть ли не один к одному скопирован из учебника по F#.

Все дело было в хвостовой рекурсии, вернее, как оказалось в ее отсутствии в неожиданных местах.
Читать дальше →
Всего голосов 43: ↑39 и ↓4 +35
Просмотры9.5K
Комментарии 67

Утечки памяти в замыканиях JavaScript

JavaScript
Перевод
Цитата из Google JavaScript style guide:

Возможность создавать замыкания — похоже, самая полезная и часто остающаяся без внимания особенность JS.

Однако, одну вещь нужно иметь виду: замыкание хранит указатель на замыкаемый им контекст. В результате, прикрепление замыкания к элементу DOM может породить циклическую зависимость и, следовательно, утечку памяти. Например, в следующем куске кода:

function foo(element, a, b) {
  element.onclick = function() { /* использует a и b */ };
}


замыкание хранит указатель на element, a и b даже в том случае, если оно никогда element не использует. А раз element тоже хранит указатель на замыкание, то получается цикл, который никогда не будет вычищен сборщиком мусора.
Читать дальше →
Всего голосов 68: ↑40 и ↓28 +12
Просмотры10.6K
Комментарии 31

Устранение утечек памяти в приложении на Питоне

Python
imageНедавно мне довелось разобраться и устранить несколько утечек памяти в популярном фреймворке Торнадо. Не беда, если вы никогда его не использовали, потому что описанное будет мало связано с ним. Рассказать я хочу о методах, которые я использовал для поиска и устранения утечек.

Все сказанное будет по большей части справедливо только для самой популярной реализации Питона — CPython. Как известно, в нем есть два механизма освобождения памяти. Первый из них — подсчет ссылок. Каждый раз, когда вы явно или не явно создаете новый объект, его счетчик ссылок равен единице. Если вы присваиваете этот объект новой переменной или передаете в качестве аргумента, его счетчик ссылок увеличивается. При выходе из функции количество ссылок на объекты, которые были в локальных переменных и аргументах, уменьшается. Если для какого-то объекта количество ссылок становится равным нулю, он немедленно уничтожается.

Это схема отлично работает до тех пор, пока не появляются объекты, ссылающиеся друг на друга. Самый простой пример — узлы какого-то дерева, хранящие ссылки на свои дочерние и родительский узлы. Узлы продолжат ссылаться друг на друга, даже когда не останется других внешних ссылок ни на один из них. Самое неприятное, что такие узлы могут ссылаться на какие-то другие данные и не давать их освободить. Чтобы устранить такие циклические ссылки, в Питоне существует второй механизм освобождения памяти — сборщик мусора. Он запускается время от времени, ставя выполнение остального кода на паузу, и анализирует все неосвобожденные объекты.

Формально, циклические ссылки нельзя назвать утечками: сборка мусора рано или поздно уничтожит такие объекты. Беда только в том, что Питон не может сам определить, когда еще рано, а когда уже поздно. В моем случае система просто прибивала процесс с Питоном, если сборка мусора не начиналась вовремя.
Читать дальше →
Всего голосов 98: ↑95 и ↓3 +92
Просмотры35.9K
Комментарии 8

Cocos2d-x: несколько рекомендаций, как не допустить утечек памяти

ПрограммированиеC++Разработка игр
Из песочницы
Tutorial
Cocos2d-x — это «движок», а точнее — набор классов, который сильно упрощает разработку графических приложений для операционных систем таких как iOS, Android, Windows phone, Windows, а также для HTML 5. В отличии от сocos2d-iphone, cocos2d-x предполагает разработку на C++, поэтому он такой универсальный. Те, кто пишет на C++ знают, что вся ответственность за выделение и освобождение памяти лежит на плечах программиста. Но разработчики cocos2d-x не плохо позаботились об этом и встроили в свой замечательный движок пул объектов, который предполагает использование смарт-поинтеров или, другими словами, умных указателей.
Читать дальше →
Всего голосов 17: ↑15 и ↓2 +13
Просмотры13.3K
Комментарии 15

Как бороться с утечками памяти в виртуальной машине, правильно закрывая браузер

Parallels
image
Один из самых частых вопросов, который задают нам пользователи Parallels Desktop (а также наверняка всех других виртуалок) – как заставить виртуальные машины потреблять меньше памяти. Об этом спрашивает огромное количество людей на форумах и в социальных сетях.
Поэтому мы всегда смотрим, какие именно программы и технологии требуют больше памяти при работе виртуальной машины в PD. И вот что нашли.
Читать дальше →
Всего голосов 39: ↑28 и ↓11 +17
Просмотры19.9K
Комментарии 27

Создание превью изображений на клиенте: борьба с прожорливыми браузерами

AjaxРазработка веб-сайтовJavaScript
Всем привет! Сегодня задача у нас следующая: необходимо создать интерфейс для загрузки картинок, который бы генерировал перед загрузкой превьюшки небольшого формата. На данный момент HTML5 вовсю шествует по планете, и, казалось бы, как это реализовать должно быть предельно ясно. Есть несколько русскоязычных статей на эту тему (вот, например). Но тут есть одно но. В рассматриваемом там подходе не уделено никакого внимания расходу памяти браузером. А расход может доходить до гигантских размеров. Разумеется, если загружать одновременно не более 5-10 картинок небольшого формата, то все остается в пределах нормы; но наш интерфейс должен позволять загружать сразу много изображений формата не меньше, чем у современных фотоаппаратов-мыльниц. И вот тогда-то свободная память начинает таять на глазах.
Постараемся вернуть украденную память
Всего голосов 99: ↑93 и ↓6 +87
Просмотры32.4K
Комментарии 34

О том, как память текла, а я не мог понять, почему

Разработка под Windows PhoneРазработка под Windows
Здравствуйте, уважаемые хабрачеловеки.

В этом коротком посте я хочу поделиться с вами некоторыми моментами, с которыми столкнулся при разработке одного из своих приложений (читалка для Windows). Речь пойдет о DirectX и, как мне показалось, странных утечках памяти.

Как я создал себе проблему?


Для отображения содержимого страниц я решил использовать DirectX. Задумка была проста: сначала создаю 2D-текстуру с текстом, а потом отображаю 3D модель с использованием подготовленных ранее текстур. Это дает мне возможность делать анимацию 3D перелистывания страниц.

Как-то так:



В момент выпуска приложения в магазин я ожидал всеобщего восхищения. Но не тут-то было. Пользователи оказались недовольны. Анализ ситуации показал, что течет память. И очень хорошо течет. Но почему? Этого я долго не мог понять.
С учетом того, что приложения в Windows 8.1 и Windows Phone 8.1 полностью не выгружаются при «закрытии», утечки памяти накапливались.
Читать дальше →
Всего голосов 27: ↑19 и ↓8 +11
Просмотры17K
Комментарии 20

High CPU или как Garbage Collector может убить производительность

Разработка веб-сайтов.NETASP
Из песочницы
Добрый день.

Примерно 2 недели назад наш мониторинг тул (NewRelic) начал детектить большое количество падений сайта продолжительностью не более 1 минуты, но с очень большой частотой. Помимо этого визуально было заметно, что общая производительность веб-приложения (Umbraco 6.1.6, .net 4.0) упала.

Красные полосы на картинке — это и есть наши падения.

image

Да, оговорюсь. Перед тем, как мы это все заметили, новый модуль для блога был установлен и соответственно блог компании был мигрирован из Worldpress в Umbraco.

В итоге у нас есть следующие входные данные: приложение стало хранить больше данных (намного больше) + был установлен сторонний модуль = High CPU.
Читать дальше →
Всего голосов 39: ↑32 и ↓7 +25
Просмотры22.5K
Комментарии 43
1