# Авторестарт если найден deadlock - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 21.09.2015, 19:52   #1
Аватар для dantest
Пользователь

Автор темы (Топик Стартер) # Авторестарт если найден deadlock

Здравствуйте!
Подскажите, нужно ли включать эту функцию и что это вообще такое?

# Авторестарт если найден deadlock
DeadLockFoundRestart = False
dantest вне форума Ответить с цитированием
Непрочитано 22.09.2015, 07:51   #2
-

По умолчанию Re: # Авторестарт если найден deadlock

Может быть стоит прочесть, для начала, что такое deadlock?
shegan вне форума Ответить с цитированием
Непрочитано 23.09.2015, 16:02   #3
Аватар для dantest
Пользователь

Автор темы (Топик Стартер) Re: # Авторестарт если найден deadlock

Цитата:
Сообщение от shegan Посмотреть сообщение
Может быть стоит прочесть, для начала, что такое deadlock?
Ничего себе ты помощник, а я то думал зря гугл юзал.
Меня интересует что такое deadlock в на л2 сервере.
dantest вне форума Ответить с цитированием
Непрочитано 23.09.2015, 16:14   #4
Изгнанные

По умолчанию Re: # Авторестарт если найден deadlock

Цитата:
Сообщение от dantest Посмотреть сообщение
Ничего себе ты помощник, а я то думал зря гугл юзал.
Меня интересует что такое deadlock в на л2 сервере.
Гугл в бане???????

Код:
public void exchange(final Account acc1, final Account acc2, final int count) throws Exception
    {
        synchronized (acc1)
        {
            synchronized (acc2)
            {
                if (acc1.getAdena().compareTo(count) < 0)
                    throw new Exception();
                else
                {
                    acc1.give(count);
                    acc2.take(count);
                }
            }
        }
    }
Вот пример взаимной блокировки или же Deadlock.
GenCloud вне форума Отправить сообщение для GenCloud с помощью Skype™ Ответить с цитированием
Непрочитано 23.09.2015, 18:12   #5
Аватар для dantest
Пользователь

Автор темы (Топик Стартер) Re: # Авторестарт если найден deadlock

Цитата:
Сообщение от GenCloud Посмотреть сообщение
Гугл в бане???????

Код:
public void exchange(final Account acc1, final Account acc2, final int count) throws Exception
    {
        synchronized (acc1)
        {
            synchronized (acc2)
            {
                if (acc1.getAdena().compareTo(count) < 0)
                    throw new Exception();
                else
                {
                    acc1.give(count);
                    acc2.take(count);
                }
            }
        }
    }
Вот пример взаимной блокировки или же Deadlock.
Я интересовался, как это повлияет на игру если не сделать рестарт если такой Deadlock имеется.
dantest вне форума Ответить с цитированием
Непрочитано 23.09.2015, 18:25   #6
Пользователь

По умолчанию Re: # Авторестарт если найден deadlock

Цитата:
Сообщение от GenCloud Посмотреть сообщение
Гугл в бане???????

Код:
public void exchange(final Account acc1, final Account acc2, final int count) throws Exception
    {
        synchronized (acc1)
        {
            synchronized (acc2)
            {
                if (acc1.getAdena().compareTo(count) < 0)
                    throw new Exception();
                else
                {
                    acc1.give(count);
                    acc2.take(count);
                }
            }
        }
    }
Вот пример взаимной блокировки или же Deadlock.
Можете пояснить почему тут будет DeadLock?
flopix вне форума Ответить с цитированием
Непрочитано 23.09.2015, 18:37   #7
Изгнанные

По умолчанию Re: # Авторестарт если найден deadlock

Цитата:
Сообщение от flopix Посмотреть сообщение
Можете пояснить почему тут будет DeadLock?
Взимание адены(1) займет монитор счета acc1, получение адены(2) займет монитор счета acc2. Произойдет взаимная блокировка, т.е. почему: взимание адены(1) ждет, пока получение адены(2) освободит монитор счета acc2, но для этого получение адены(2) должна получить доступ к монитору acc1, занятому взиманием адены(1).
GenCloud вне форума Отправить сообщение для GenCloud с помощью Skype™ Ответить с цитированием
Непрочитано 23.09.2015, 18:53   #8
Аватар для n3k0nation
Antihero

По умолчанию Re: # Авторестарт если найден deadlock

Цитата:
Сообщение от dantest Посмотреть сообщение
Я интересовался, как это повлияет на игру если не сделать рестарт если такой Deadlock имеется.
Со временем локнутся все триды в пуле packets, если дедлок в исполнении пакетов, сервер перестанет обрабатывать пакеты, очередь пакетов переполнится и мы получим out of memory, но скорее всего, перед этим Вам позвонит офигевший ГМ и скажет, что сервер повис.

Если включить, то ситуация аналогична, но офигевший ГМ уже звонит, то что сервер сам перезагружается. Особенно, это весело на эпиках.

Пример классического дедлока:
Код:
	static Object sync1 = new Object();
	static Object sync2 = new Object();
	public static void main(String[] args) {
		new Thread(() -> one()).start();
		new Thread(() -> two()).start();
	}
	
	static void one() {
		synchronized (sync1) {
			try {
				Thread.sleep(1000);
			} catch(InterruptedException e) {}
			synchronized (sync2) {
				System.out.println("pew");
			}
		}
	}
	
	static void two() {
		synchronized (sync2) {
			try {
				Thread.sleep(1000);
			} catch(InterruptedException e) {}
			synchronized (sync1) {
				System.out.println("ololo");
			}
		}
	}
Состояние гонки - тоже самое, но без слипа тридов. Если повезет, то можно поймать дедлок.

И вообще, google it.
__________________
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
n3k0nation вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 23.09.2015, 19:19   #9
Аватар для dantest
Пользователь

Автор темы (Топик Стартер) Re: # Авторестарт если найден deadlock

Цитата:
Сообщение от Pointer*Rage Посмотреть сообщение
Со временем локнутся все триды в пуле packets, если дедлок в исполнении пакетов, сервер перестанет обрабатывать пакеты, очередь пакетов переполнится и мы получим out of memory, но скорее всего, перед этим Вам позвонит офигевший ГМ и скажет, что сервер повис.

Если включить, то ситуация аналогична, но офигевший ГМ уже звонит, то что сервер сам перезагружается. Особенно, это весело на эпиках.

Пример классического дедлока:
Код:
	static Object sync1 = new Object();
	static Object sync2 = new Object();
	public static void main(String[] args) {
		new Thread(() -> one()).start();
		new Thread(() -> two()).start();
	}
	
	static void one() {
		synchronized (sync1) {
			try {
				Thread.sleep(1000);
			} catch(InterruptedException e) {}
			synchronized (sync2) {
				System.out.println("pew");
			}
		}
	}
	
	static void two() {
		synchronized (sync2) {
			try {
				Thread.sleep(1000);
			} catch(InterruptedException e) {}
			synchronized (sync1) {
				System.out.println("ololo");
			}
		}
	}
Состояние гонки - тоже самое, но без слипа тридов. Если повезет, то можно поймать дедлок.

И вообще, google it.
Спасибо большое!
dantest вне форума Ответить с цитированием
Непрочитано 23.09.2015, 23:32   #10
Пользователь

По умолчанию Re: # Авторестарт если найден deadlock

Цитата:
Сообщение от GenCloud Посмотреть сообщение
Взимание адены(1) займет монитор счета acc1, получение адены(2) займет монитор счета acc2. Произойдет взаимная блокировка, т.е. почему: взимание адены(1) ждет, пока получение адены(2) освободит монитор счета acc2, но для этого получение адены(2) должна получить доступ к монитору acc1, занятому взиманием адены(1).

Этот код может служить аналогией вашему примеру?
PHP код:
        Object acc1 = new Object();
        
Object acc2 = new Object();
        
Object acc3;
        
Object acc4;
        
synchronized (acc1)
        {
            
synchronized (acc2)
            {
                
acc3 acc1;
                
acc4 acc2;
            }
        } 
Деадлок он не вызывает. Помоему во вложенных синхронизациях допускается доступ к обоим объектам синхронизации.

Точнее даже для реализации деадлока нужно минимум 2 потока.

Последний раз редактировалось flopix; 24.09.2015 в 00:32.
flopix вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ddosguard VS revegan Wishmаster Курилка / Yak floor 78 28.03.2013 18:44
Настройка Ip - адресов не работает(( HaCkiY Lineage II 25 21.02.2010 10:51
Проблема с коннектом Illum Lineage II 2 01.02.2010 20:57
ГМ команды PROGRAMMATOR Документация 44 19.12.2009 21:39
CT1 Kamael Tonchi Lineage II 4 30.01.2008 23:54


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 18:30. Часовой пояс GMT +3.

Вверх