IE висит, используя 100% CPU


3

У меня есть веб-приложение, которое в процессе нормального взаимодействия зависает IE. «IE висит», я имею в виду, что IE больше не отвечает и использует 100% CPU. Единственный выход из этого состояния - убить IE-процесс. О приложении:

  • Он загружает только одну страницу в браузере, общается с сервером с помощью запросов Ajax и обновляет DOM.
  • Я могу воспроизвести это как с IE6, так и с IE7, но не с Firefox или Safari.

Мне интересно, видел ли кто-нибудь это уже, и если есть несколько известных случаев, которые могут получить IE в этом висели/используя 100% состояния процессора.

  0

Привет, доступна ли эта страница в Интернете, чтобы посмотреть? thanks 22 фев. 092009-02-22 05:51:58

  0

К сожалению, это приложение, которое было создано для клиента и которое не является общедоступным. 22 фев. 092009-02-22 06:16:18

  0

Может быть, вы сможете разместить текст HTML/JavaScript на странице? Кроме того, можете ли вы предоставить нам информацию об использовании памяти на этой странице? Это высоко? Он поднимается? 22 фев. 092009-02-22 06:33:36

  0

Страница довольно большая. Существует около 1 МБ HTML, 600 Кбайт JavaScript (сведено к минимуму, объединено в один файл). При загрузке страницы использование памяти IE7 увеличивается на 20 МБ. При использовании страницы он увеличивается еще на 40 МБ. Увеличивает еще 50 МБ до того, как он зависает. 22 фев. 092009-02-22 06:45:52

  0

@BobbyShaftoe Извините, потому что это приложение, созданное для клиента, здесь я не могу многое рассказать. Мне пришлось бы создать воспроизводимый тестовый пример, который не содержит никакого кода, который кажется почти невозможным :). 22 фев. 092009-02-22 06:47:14

  0

Алессандро, IE очень плохой (медленный) при размещении элементов в DOM с использованием XPATH, и довольно плохо при манипулировании DOM (добавление суб-узлов.) Какие виды операционных систем - это ваш AJAX, выполняющийся на DOM (как для чтения, так и для записи?) 22 фев. 092009-02-22 08:29:44

  0

Это довольно тяжелая страница. 22 фев. 092009-02-22 15:52:48

  0

@BobbyShaftoe Да, это действительно :). 22 фев. 092009-02-22 21:02:48

  0

@ Vlad Romascanu, он выполняет все виды операций, включая массовые обновления страницы (да, прочитайте и напишите). 22 фев. 092009-02-22 21:04:02

  0

Алессандро, вы когда-нибудь решали эту проблему? Мы сталкиваемся с чем-то очень похожим. Благодарю. 06 май. 102010-05-06 19:04:40

0

Вы пытались выяснить проблему? Если проблема также возникает в IE8, вы можете использовать команды console.log и их потрясающий новый инструмент отладчика/dev, который встроен. В противном случае используйте старую панель инструментов Dev для IE или оповещений. Попытайтесь уменьшить проблему, а затем зарегистрируйте ошибку (и вставьте сюда код здесь).

  0

Код был посыпан console.log(), но это не помогло. У меня также есть трассировки стека, которые вы можете увидеть здесь: http://stackoverflow.com/questions/576349/ie-hanging-with-100-cpu-got-stack-trace 26 фев. 092009-02-26 03:05:39


1

Попробуйте подключить отладчик сценариев (через Visual Studio, в моем случае) и посмотреть, что вызывает его.

Скорее всего, это javascript, выполняющий бесконечный цикл, или просто слишком быстрый цикл для того, что нужно сделать для каждого запроса ajax.

  0

Но если это то, что происходит, t IE предлагает прекратить выполнение скрипта через определенное количество времени? По крайней мере, я привык видеть это сообщение в IE, когда пишу бесконечный цикл. Существуют ли случаи, когда IE не может обнаружить скрипт, работающий в течение длительного времени? 22 фев. 092009-02-22 06:06:51

  0

@ Алессандро-Верне, эта ошибка возникает только в ситуациях. Вы правы, это может быть полезно, но есть большой класс ситуаций, которые могут возникать там, где вы не получите это сообщение. 22 фев. 092009-02-22 06:30:59

  0

@BobbyShaftoe Интересно, я не знал, что бесконечные петли могут заставить IE зависнуть. Спасибо за эту информацию. Я попытаюсь следовать советам другого пользователя, который предложил мне проверить это с помощью IE8 и использовать инструменты IE8 для его отладки. 22 фев. 092009-02-22 06:33:24

  0

Я видел, как FF делает это, но никогда не IE. Ответ от Джорджа Райли звучит многообещающе. 22 фев. 092009-02-22 08:58:40

  0

Это зависит от того, где он застрял. Это может быть в движке JavaScript. Это может быть в движке HTML-макета или другом родном коде, и в этом случае отладчик сценариев не поможет. Трюк WinDbg, который я дал, поможет определить, что происходит. 23 фев. 092009-02-23 01:54:50

  0

Джордж, это не происходит в движке JavaScript. Я использовал ваш метод для получения следов стека и разместил их здесь: http://stackoverflow.com/questions/576349/ie-hanging-with-100-cpu-got-stack-trace 26 фев. 092009-02-26 03:06:42


6

Использование WinDbg, http://www.microsoft.com/whdc/devtools/debugging/

Прикрепите его к процессу IE, который имеет проблемы.

Команда .symfix + установит ваш путь символа на сервер символов Microsoft и будет кэшировать символы отладки локально.

Команда runaway будет перечислять все стеки в процессе и сообщать вам, какой из них идет в ярость.

Если вам повезет, вы можете увидеть что-то узнаваемое, такое как замена регулярного выражения в верхней части стека. Или, возможно, механизм компоновки перешел в бесконечный цикл. И то и другое произошло со мной в прошлом.

Если callstack не имеет смысла, используйте 'g', чтобы сделать процесс, подождите несколько секунд, нажмите Ctrl + Break, затем попробуйте снова убежать.

Как только вы получили символы локально, вы также можете использовать Process Explorer для SysInternals для просмотра стеков процессов. Настройте параметр «Символы» в Process Explorer, чтобы указать на ваш локальный кеш символов, например, c: \ Program Files \ Debugging Tools для Windows \ sym.

  0

@George V. Reilly, This это отличный совет. Я определенно должен попробовать это. 22 фев. 092009-02-22 21:07:21

  0

@George V. Reilly, BTW, вы покупаете на картинке этого сайта Microsoft, которого вы рекомендовали? ;) 22 фев. 092009-02-22 21:08:24

  0

Хех. Неа. Но я один из пастообразных белых парней с бородами и очками на обложке «Beginning ATL COM Programming». 23 фев. 092009-02-23 01:52:37

  0

@George, :). Таким образом, мы находимся в хорошей компании; Я являюсь парнем справа в этой книге Professional XML: http://www.wrox.com/WileyCDA/WroxTitle/productCd-0471777773.html 26 фев. 092009-02-26 03:08:49