Как перезагрузить sql сервер 1с
Иногда сервер приложений занимает всю память и ее надо освободить.
Можно презапустить службу 1С, но это может привести к тому, что сеансы пользователей, которые работаю с данными, завершаться аварийно.
Есть возможность перезапустить рабочие процессы сервера приложений без заверешния работы пользователей.
Для этого в консоли сервера выбираем процесс, который занял больше всего памяти и открываем его свойства.
В свойствах процесса указываем Использование = Не использовать. Нажимаем ОК.
Без паники. Все сеансы пользователей автоматически перейдут на другие рабочие процессы. Проверено на практике (много раз).
Дожидаемся, пока процесс не завершится:
Примечание: сеанс Конфигуратора не переносится с процесса на процесс.
После этого повторяем обратную операцию. Открываем свойство остановившегося рабочего процесса, указываем Использование = Использовать.
Ждем. При первом подключении выделяется память:
Все. Память освободилась. Начинается новая жизнь.
Также можно настроить
Специальные предложения
это делает намного проще. В кластере устанавливаем порог допустимого объема памяти см. приложение.
+
Упустил главный момент необходимо поставить "Интервал превышения допустимого объема памяти __ секунд"
p.s. Работает как часы, версия платформы 8.2.15.310
Выдержка из документации:
Интервал перезапуска __ секунд
Интервал времени после запуска процесса, по истечении которого рабочий процесс перезапускается. Нулевое значение означает, что рабочие процессы не будут перезапускаться автоматически.
Допустимый объем памяти __ KB
Устанавливает предельный объем виртуального адресного пространства, после постоянного превышения которого в течение определенного времени (см. следующий параметр) рабочий процесс будет автоматически перезапущен. Нулевое значение означает, что критический объем памяти не задан и автоматический перезапуск рабочих процессов не выполняется.
Интервал превышения допустимого объема памяти __ секунд
Определяет интервал времени постоянного превышения предельного объема виртуального адресного пространства, занимаемого рабочим процессом (см. предыдущий параметр), после которого выполняется автоматический перезапуск рабочего процесса. Нулевое значение означает, что автоматически перезапуск рабочих процессов не выполняется.
user745830; 1v7; Kom-off; Sergoninfostarru; sanches; Misanets; tolyan_ekb; MoshkovEV; JohnyDeath; i_lo; iov; sergiobargio1; Юрий ЛЛ; Andreyyy; AlX0id; Alex_Japanese_Student; adhocprog; + 17 – Ответить 5. Alex_Japanese_Student 443 31.05.12 10:59 Сейчас в темеНаверно, не на всех версиях платформы это свойство ведет себя так, как описано в документации.
У нас на платформе 8.2.13.289 и .14.540 процессы продолжали жить с памятью, превышающей установленное пороговое значение, и при этом никакие сеансы пользователей не перемещались на другие процессы.
Все пользовательские сессии перебрасываются на другой рабочий процесс, а этот ("зависший") убивается в диспетчере задач (для этого нужно в его колонках вывести PID процесса, а в свойствах рабочего процесса 1С посмотреть этот самый PID). Сейчас проверил у себя , только один рабочий процесс, как сделать чтобы было больше ?, если завершу то точно все юзверы отключаться (6) Посмотрите в желто-оранжевой книжке по особенностям 1С в клиент-серверном варианте (6) hamlo_666,
В консоли администрирования: Кластеры-<ваш кластер>- Рабочие серверы-<ваш кластер>- Рабочие процессы - Добавить Изменять настройку рабочих процессов без последующего перезапуска службы 1С влечет за собой кучу проблем у пользователей, проверено на практике :). Поиграться конечно можно, но перезапуск службы в конечном итоге обязателен.
Вот нашел, начались сыпаться вот такие ошибки (УПП, в базе находилось примерно 200 пользователей):
1. При записи какого либо объекта, в данном примере, документа "Заявка на расходвание средств":
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
: Ошибка при получении значения атрибута контекста (НаличиеОбменаУПП)
по причине:
Попытка получения неинициализированного значения параметра сеанса
2. При входе в систему сразу выдавала ошибку: "Таблица не найдена "Справочник.Пользователи". и кнопка "Завершить работу"
Раньше таких ошибок не возникало, началось именно после того, как мы добавили наживую рабочие процессы.
Ошибки возникали хаотично, беглый анализ показал, ошибки появляются у тех пользователей которых сервер начал перекидывать с одного процесса на другой распределяя нагрузку. В начале пытались выкидывать этих пользователей из базы и после того как они заходили заново ошибка уходила, но как оказалось не надолго. Помучавшись два дня, в конечном итоге, вырубили всех пользователей, добавили заново рабочие процессы, перезапустири службу и проблем больше не было.
И в инсрукции к серверу явно написано нужно перезапускать, но как всегда начинаешь их читать когда уже проблемы возникли.
Данный скрипт я раскопал на просторах интернета в виде "как запустить службу" или "как остановить службу", подкрасил, подмазал, подправил и поставил, но данные решения в итоге мне не очень подошли по следующим причинам:
1. После передачи команды службе, к примеру, отправили "stop", она может и вовсе не завершиться, так сказать ( забить) проигнорировать и в результате придется запускать скрипт по новой или делать что-то руками.
2. Вытекает из п. 1 - за скриптом надо следить, поглядывать, остановилась ли служба или запустилась ли служба.
3. Таймаут для ожидания остановки или запуска службы в зависимости от загрузки железа все время "не в кассу", то слишком маленький, то слишком большой, жалко времени на все это.
// - далее по тексту таким образом будут обозначаться комментарии в коде
// эти комментарии, естественно, убираем когда все это станет батником или цмдшником
// ну или меняем на rem
// остановка сервера 1с
sc stop "1C:Enterprise 8.2 Server Agent"
//таймаут 15 секунд
TIMEOUT /T 15 /NOBREAK
//одно время rmngr.exe не останавливался после остановки сервера 1с
//поэтому я ему помогаю это сделать
TASKKILL /f /IM rmngr.exe
//таймаут 10 сек
TIMEOUT /T 10 /NOBREAK
//остановка агента сервера 1с предприятия
sc stop SQLSERVERAGENT
//таймаут 15 сек
TIMEOUT /T 15 /NOBREAK
//остановка mssqlserver
sc stop MSSQLSERVER
//таймаут 30 сек
TIMEOUT /T 30 /NOBREAK
//запуск mssqlsrever
sc start MSSQLSERVER
//таймаут 30 сек
TIMEOUT /T 30 /NOBREAK
//запуск агента mssqlserver
sc start SQLSERVERAGENT
//запуск сервера 1с предприятия
sc start "1C:Enterprise 8.2 Server Agent"
В результате небольшой модификации все эти проблемы решились, правда добавились некоторые новые, но для меня не существенные:
Немного ловкости рук, циклов, условий и мы получили:
//ИЗМЕНЕННЫЙ код для остановки сервера 1с предприятя
//ссыль, куда мы прыгнем, если у нас остановка не получится с первого раза
:Stop1c
//собственно передача команды остановки службе
rem sc stop "1C:Enterprise 8.2 Server Agent (x86-64)" > NUL
//таймаут 3 сек
TIMEOUT /T 3 /NOBREAK
//проверка службы (остановилась или нет)
sc query "1C:Enterprise 8.2 Server Agent (x86-64)" | find /i "1 STOPPED" > NUL
//если не остановилась, попросим еще раз
if %errorlevel%==1 GoTo Stop1c
//остальные службы по аналогии, запуск с использованием: find /i "4 RUNNING"
Достоинства:
1. запустил и забыл, пока все не будет сделано как положено эта штука не успокоится
В прикрепленном файле полный текст скрипта, не забываем поменять расширение c .txt на .cmd
Данный скрипт я раскопал на просторах интернета в виде "как запустить службу" или "как остановить службу", подкрасил, подмазал, подправил и поставил, но данные решения в итоге мне не очень подошли по следующим причинам:
1. После передачи команды службе, к примеру, отправили "stop", она может и вовсе не завершиться, так сказать ( забить) проигнорировать и в результате придется запускать скрипт по новой или делать что-то руками.
2. Вытекает из п. 1 - за скриптом надо следить, поглядывать, остановилась ли служба или запустилась ли служба.
3. Таймаут для ожидания остановки или запуска службы в зависимости от загрузки железа все время "не в кассу", то слишком маленький, то слишком большой, жалко времени на все это.
// - далее по тексту таким образом будут обозначаться комментарии в коде
// эти комментарии, естественно, убираем когда все это станет батником или цмдшником
// ну или меняем на rem
// остановка сервера 1с
sc stop "1C:Enterprise 8.2 Server Agent"
//таймаут 15 секунд
TIMEOUT /T 15 /NOBREAK
//одно время rmngr.exe не останавливался после остановки сервера 1с
//поэтому я ему помогаю это сделать
TASKKILL /f /IM rmngr.exe
//таймаут 10 сек
TIMEOUT /T 10 /NOBREAK
//остановка агента сервера 1с предприятия
sc stop SQLSERVERAGENT
//таймаут 15 сек
TIMEOUT /T 15 /NOBREAK
//остановка mssqlserver
sc stop MSSQLSERVER
//таймаут 30 сек
TIMEOUT /T 30 /NOBREAK
//запуск mssqlsrever
sc start MSSQLSERVER
//таймаут 30 сек
TIMEOUT /T 30 /NOBREAK
//запуск агента mssqlserver
sc start SQLSERVERAGENT
//запуск сервера 1с предприятия
sc start "1C:Enterprise 8.2 Server Agent"
В результате небольшой модификации все эти проблемы решились, правда добавились некоторые новые, но для меня не существенные:
Немного ловкости рук, циклов, условий и мы получили:
//ИЗМЕНЕННЫЙ код для остановки сервера 1с предприятя
//ссыль, куда мы прыгнем, если у нас остановка не получится с первого раза
:Stop1c
//собственно передача команды остановки службе
rem sc stop "1C:Enterprise 8.2 Server Agent (x86-64)" > NUL
//таймаут 3 сек
TIMEOUT /T 3 /NOBREAK
//проверка службы (остановилась или нет)
sc query "1C:Enterprise 8.2 Server Agent (x86-64)" | find /i "1 STOPPED" > NUL
//если не остановилась, попросим еще раз
if %errorlevel%==1 GoTo Stop1c
//остальные службы по аналогии, запуск с использованием: find /i "4 RUNNING"
Достоинства:
1. запустил и забыл, пока все не будет сделано как положено эта штука не успокоится
В прикрепленном файле полный текст скрипта, не забываем поменять расширение c .txt на .cmd
При установке второй версии для параллельной работы установка аналогичная за исключением пункта:
Снимаем флаг «Установить сервер 1С:Предприятия 8 как сервис Windows(рекомендуется)»
Далее готовим строку:
Мы используем: sc create
Строка выглядит как:
sc create "<Агент сервера 1С:Предприятия 8.Х.Х.ХХХХ>" binpath= "<место расположения ragent.exe>" -srvc -agent -regport 1641 -port 1640 -range 1660:1591 -d \"<место расположения папки сервера 1С>""
<Агент сервера 1С:Предприятия 8.Х.Х.ХХХХ> - указываем имя службы. Главное так, чтобы и вы, и те, кому предстоит поддерживать сервер 1С, могли в дальнейшем, легко ее идентифицировать.
<место расположения ragent.exe>" -srvc -agent -regport 1641 -port 1640 -range 1660:1691 -d \"<место расположения папки сервера 1С>
Строку службы все как обычно:
<место расположения ragent.exe>
Если порт 1540 уже занят (если один сервер в виде службы уже установлен), то ставим следующий или любой, какой понравится, например, вместо:
1541 -port 1540 -range 1560:1591
1641 -port 1640 -range 1660:1691
Вместо <место расположения папки сервера 1С> указываем строку, где планируем расположить папку с файлами сервера. Рекомендую не хранить эту папку на диске С:\, Разбивайте диск сервера на 2. Под систему и под сервер 1С. Тогда в случае, если файлы журнала регистрации займут все место на диске, Вы без проблем зайдете на сервер и почистите их. Чего нельзя сказать, если вы своими файлами журнала регистрации займете все место на системном диске.
Далее заходим в командную строку от админа:
И выполняем команду:
sc create "Агент сервера 1С:Предприятия 8.Х.Х.ХХХХ" binpath= "\"C:\Program Files\1cv8\8.Х.Х.ХХХХ\bin\ragent.exe\" -srvc -agent -regport 1741 -port 1740 -range 1760:1591 -d \"E:\1C_Bases\srvinfo_8_Х_Х_ХХХХ\""
В итоге получим службу:
Если службы не появилось, нажмите кнопку Обновить.))))
Если передумали, то можно удалить только что созданную службу:
sc delete "<Агент сервера 1С:Предприятия 8.Х.Х.ХХХХ>"
где <Агент сервера 1С:Предприятия 8.Х.Х.ХХХХ> - имя службы
Далее заходим в службу:
Ставим переключатель в положение «С системной учетной записью»
И в этом случае можно почистить кэш (это бывает полезно при разного рода непонятном поведении 1С)
Удалить эти файлы можно только при остановленной службе.
Если Вы остановили службу, а файлы не удаляются, значит, нужно зайти в Task manager и проверить его на наличие зависших:
В случае обнаружения выполнить end task.
- 3.Как перенести БД с платформы на платформу, без потери журнала регистрации?
После того как вы установите (смотри пункт 1.) новую версию сервера, у Вас появится желание перевести одну или все БД с текущей версии платформы (сервера) на ту, что вы только что установили.
Сделать это просто: открываем свойства БД на текущем сервере
Кроме того, открываем новый сервер:
Создаем новую БД и копируем в нее все параметры из текущей, единственное, пароль для пользователя у Вас должен быть
По окончании с текущего сервера БД удаляем
Далее заходим в папку, где ранее располагались файлы БД до переноса. Узнать это место просто:
Читайте также: