Жор памяти
От: Igor Trofimov  
Дата: 02.02.04 17:17
Оценка:
За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки. Случайно заметили (там еще много памяти было).

Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?

Как бы так посмотреть соотношения тип/кол-во для всех объектов, существующих в памяти приложения? Уже после того, как оно поработало пару дней?
Re: Жор памяти
От: TK Лес кывт.рф
Дата: 02.02.04 18:41
Оценка: 1 (1)
Hello, "Igor Trofimov"

> За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки. Случайно заметили (там еще много памяти было).

>
> Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?
>
> Как бы так посмотреть соотношения тип/кол-во для всех объектов, существующих в памяти приложения? Уже после того, как оно поработало пару дней?

Написать стресс тесты и изначально запустить под профайлером?
Posted via RSDN NNTP Server 1.8 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re: Жор памяти
От: Michael Chelnokov Украина  
Дата: 02.02.04 19:05
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?


А каким образом в managed-коде можно "наплодить лишних ссылок"?
Re[2]: Жор памяти
От: Воронков Василий Россия  
Дата: 02.02.04 19:16
Оценка: 1 (1)
Здравствуйте, Michael Chelnokov, Вы писали:

iT>>Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?


MC>А каким образом в managed-коде можно "наплодить лишних ссылок"?


А что кто-то это запрещает?
... << RSDN@Home 1.1.3 beta 1 >>
Re[2]: Жор памяти
От: TK Лес кывт.рф
Дата: 02.02.04 19:23
Оценка: :))) :)
Hello, "Michael Chelnokov"
>
> iT>Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?
> А каким образом в managed-коде можно "наплодить лишних ссылок"?

Никаких проблем:
static ArrayList memoryLeakHolder = new ArrayList();    // складывать весь мусор тут
Posted via RSDN NNTP Server 1.8 beta
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: Жор памяти
От: Michael Chelnokov Украина  
Дата: 02.02.04 19:46
Оценка:
Здравствуйте, TK, Вы писали:

>> А каким образом в managed-коде можно "наплодить лишних ссылок"?

TK>Никаких проблем:
TK>
TK>static ArrayList memoryLeakHolder = new ArrayList();    // складывать весь мусор тут
TK>

Извиняюсь, забыл дописать "... находясь в здравом уме и твердой памяти"
Re: Жор памяти
От: Спасибо  
Дата: 02.02.04 20:05
Оценка: -1
Здравствуйте, Igor Trofimov, Вы писали:

iT>За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки. Случайно заметили (там еще много памяти было).


iT>Вот теперь думаю — мог так "сработать" GC или это я где-то ссылки пложу лишние?


По моему мнению,
Впринципе GC так и должен был сработать, так как сам говоришь что памяти дофига еще оставалось. Просто если система потребует памяти а ее не окажется, тогда пинка под зад даст GC-ру и он начнет шевелится. А так он впринципе правильно что спит — нефиг лишний раз систему нагружать, пока оперативка есть можно и поспать. Потом проснеться почистит за пару сек и снова три дня спать.
Эх мне бы так.
Re[4]: Жор памяти
От: Igor Trofimov  
Дата: 02.02.04 20:06
Оценка:
MC>Извиняюсь, забыл дописать "... находясь в здравом уме и твердой памяти"

Я вот тоже удивился — ну где и чего я мог такого налажать?
Если найду — расскажу.
Re[2]: Жор памяти
От: Undying Россия  
Дата: 02.02.04 20:07
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>А каким образом в managed-коде можно "наплодить лишних ссылок"?


Можно забыть отписать объект от события.
... << RSDN@Home 1.1 beta 2 >>
Re[3]: Жор памяти
От: Спасибо  
Дата: 02.02.04 20:11
Оценка:
Здравствуйте, Undying, Вы писали:

U>Здравствуйте, Michael Chelnokov, Вы писали:


MC>>А каким образом в managed-коде можно "наплодить лишних ссылок"?


U>Можно забыть отписать объект от события.


Товарищ, бессмертный, можно по подробнее что это значит. Лучше прямо кусок кода. Всмысле делегат создать, "прибавить" к какому-нить событию и не удалить ?
Re[4]: Жор памяти
От: Undying Россия  
Дата: 02.02.04 20:36
Оценка:
Здравствуйте, Спасибо, Вы писали:

U>>Можно забыть отписать объект от события.


С>Товарищ, бессмертный, можно по подробнее что это значит. Лучше прямо кусок кода. Всмысле делегат создать, "прибавить" к какому-нить событию и не удалить ?


Конечно, можно.

    private void menuItem1_Click(object sender, System.EventArgs e)
    {
      MyClass my = new MyClass(this.Size.Height.ToString());
      this.SizeChanged += new EventHandler(my.SizeChanged);      
    }
    public class MyClass
    {
      public string Name = "";
      public MyClass(string name)
      {
        this.Name = name;
      }
      public void SizeChanged(object sender, System.EventArgs e)
      {
        MessageBox.Show(Name);
      }
    }


При каждом клике на пункт меню будет создавать еще один экземпляр MyClass и умрут они только вместе с формой.
... << RSDN@Home 1.1 beta 2 >>
Re[5]: Жор памяти
От: Спасибо  
Дата: 02.02.04 20:46
Оценка:
U>
U>    private void menuItem1_Click(object sender, System.EventArgs e)
U>    {
U>      MyClass my = new MyClass(this.Size.Height.ToString());
U>      this.SizeChanged += new EventHandler(my.SizeChanged);      
U>    }
U>    public class MyClass
U>    {
U>      public string Name = "";
U>      public MyClass(string name)
U>      {
U>        this.Name = name;
U>      }
U>      public void SizeChanged(object sender, System.EventArgs e)
U>      {
U>        MessageBox.Show(Name);
U>      }
U>    }
U>


U>При каждом клике на пункт меню будет создавать еще один экземпляр MyClass и умрут они только вместе с формой.


Понятненько. Спасибо !. Я так понимаю можно и просто создать какой-нить public ArrayList в форме , и добавляемые в него элемены не будут отчищаться также до смерти самого приложения ..
Re[6]: Жор памяти
От: Undying Россия  
Дата: 02.02.04 21:14
Оценка:
Здравствуйте, Спасибо, Вы писали:

С>Понятненько. Спасибо !. Я так понимаю можно и просто создать какой-нить public ArrayList в форме , и добавляемые в него элемены не будут отчищаться также до смерти самого приложения ..


Не совсем, когда создается переменная на уровне формы, то понятно, что она очистится только при закрытии формы. В ситуации с событиями все куда менее прозрачно. Например, в приведенном примере была создана локальная переменная, которая вроде должна уничтожиться при выходе из метода, но на самом деле этого не произойдет.
... << RSDN@Home 1.1 beta 2 >>
Re[7]: Жор памяти
От: Спасибо  
Дата: 02.02.04 22:35
Оценка:
Здравствуйте, Undying, Вы писали:

U>Здравствуйте, Спасибо, Вы писали:


С>>Понятненько. Спасибо !. Я так понимаю можно и просто создать какой-нить public ArrayList в форме , и добавляемые в него элемены не будут отчищаться также до смерти самого приложения ..


U>Не совсем, когда создается переменная на уровне формы, то понятно, что она очистится только при закрытии формы. В ситуации с событиями все куда менее прозрачно. Например, в приведенном примере была создана локальная переменная, которая вроде должна уничтожиться при выходе из метода, но на самом деле этого не произойдет.


Но она помещалась в вполне нелокальный список (в плане делегат события)
Впринципе событие очень похоже на ArrayList в который складываются делегаты.
Re[5]: Жор памяти
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.02.04 07:27
Оценка: 1 (1)
Здравствуйте, Igor Trofimov, Вы писали:

iT>Я вот тоже удивился — ну где и чего я мог такого налажать?

iT>Если найду — расскажу.

Самое опасное в этом плане — глобальные кеши и делегаты. Проверь чтобы ты везде отписывался от событий в ненужных объектах и чистил кеши.
... << RSDN@Home 1.1.3 beta 2 >>
AVK Blog
Re: Жор памяти
От: Poudy Россия  
Дата: 03.02.04 07:32
Оценка:
Посмотри на размер различных поколений. Может быть, у тебя некоторые объекты плавно и стабильно попадают во второе поколение?
Re: Жор памяти
От: mihailik Украина  
Дата: 03.02.04 09:09
Оценка: :))
iT>За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки

А с чего ты так решил?
... << RSDN@Home 1.1.3 beta 1 >>
Re: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.02.04 10:27
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>За 7 дней простенький сервер (remoting) сожрал 800 мегов оперативки. Случайно заметили (там еще много памяти было).


Может в этом проблема
http://www.gotdotnet.ru/default.aspx?s=board_search&amp;d_no=0&amp;text=SetProcessWorkingSetSize
и солнце б утром не вставало, когда бы не было меня
Re[2]: Жор памяти
От: Igor Trofimov  
Дата: 03.02.04 17:21
Оценка:
M>А с чего ты так решил?

А в TaskManager посмотрели.
Re[3]: Жор памяти
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 03.02.04 17:24
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

M>>А с чего ты так решил?


iT>А в TaskManager посмотрели.

http://www.gotdotnet.ru/DotNet/FAQ/CommonForum/524.aspx
и солнце б утром не вставало, когда бы не было меня
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.