redis-server.service: не удалось с результатом "тайм-аут". - Больше ошибок, перечисленных внутри
Обновление: это, кажется, в основном исправлено. Я не уверен на 100%, что я сделал, но он работает, и мои сайты загружаются с ним должным образом. Тем не менее, я все еще имею ошибку #1 о том, что PID не читается.
Я надеюсь, что смогу получить некоторую помощь в выяснении, почему Redis-Server не будет работать для меня. У меня это было полностью запущено около 3 дней назад, но когда я попытался начать удаление других программ кэширования из моей установки WordPress. Я как-то сломал Redis. Затем я перечислил ошибки, а затем попытался их исправить. Пожалуйста, дайте мне знать, что вы думаете, и как я могу попытаться исправить это в будущем.
Я установил Redis-Server изначально из источника с redis.io, но как только он сломался, я попытался переустановить из источника, а также попытался переустановить из apt
, У меня одинаковые ошибки при обоих типах установки.
uname -a: Linux serverName.tld 4.4.0-97-generiC#120-Ubuntu SMP Вт 19 сентября 17:28:18 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux Ubuntu 16.04 Redis-Server 4.0.2
Для установки Redis-Server я использовал следующий учебник: Установите Redis Object Cache для WordPress PHP 7 в Ubuntu 16.04
Ошибки:
redis-server.service: файл PID /var/run/redis/redis.pid недоступен для чтения (пока?) после запуска: такого файла или каталога нет
- Я попытался исправить это, убедившись, что / var / run / redis / уже создан. Я также удостоверился, что (в разное время), что / var / run / redis / принадлежит redis:redis, а также redis:www-data (моя группа apache2). Я также пробовал много схем разрешений 777, 755, 775, 007, 770.
Несмотря на все это, я иногда все еще получаю ошибку. - Я также вручную создал файл /var/run/redis/redis.pid с теми же типами разрешений, которые я упоминал выше.
- Наконец, согласно некоторым рекомендациям на веб-сайтах, я также изменил PIDFile на redis-server.pid ...
- Похоже, что ни одно из этих изменений не сохраняется и не работает последовательно для этого сообщения об ошибке.
- Я попытался исправить это, убедившись, что / var / run / redis / уже создан. Я также удостоверился, что (в разное время), что / var / run / redis / принадлежит redis:redis, а также redis:www-data (моя группа apache2). Я также пробовал много схем разрешений 777, 755, 775, 007, 770.
Вы запросили maxclients 20000, требуя не менее 20032 max файловых дескрипторов. Сервер не может установить максимальное количество открытых файлов на 20032 из-за ошибки ОС: операция не разрешена. Текущий максимальный размер открытых файлов составляет 4096. Максклиенты были уменьшены до 4064, чтобы компенсировать низкий уровень ulimit. Если вам нужны более высокие maxclients, увеличьте 'ulimit -n'.
- Похоже, на это повлияла часть "MaxClients" файла redis.conf... Я попытался изменить параметр MaxClients, закомментировав его и установив значение по умолчанию 10000 ... Я также изменил это значение на 20000 в redis.conf и число увеличивается до 20032 ... поэтому всегда кажется, что ему нужно на 32 файла больше, чем мне разрешено, или что-то в этом роде.
- Я изменил файл /etc/systemd/system/redis-server.service, добавив в него "LimitNOFILE=64000" ... это не имеет значения. Я перезапустил сервер - без изменений.
- Я изменил /etc/default/redis-server и раскомментировал "ULIMIT=65536" ... перезапустил, опять без изменений.
ВНИМАНИЕ: в вашем ядре включена поддержка прозрачных огромных страниц (THP). Это создаст проблемы с задержкой и использованием памяти в Redis. Чтобы устранить эту проблему, выполните команду 'echo never> / sys / kernel / mm / transparent_hugepage / enabled' от имени пользователя root и добавьте ее в свой файл /etc/rc.local, чтобы сохранить настройку после перезагрузки. Redis должен быть перезапущен после отключения THP
- Это было исправлено, как только я дал следующую команду:
echo never> / sys / kernel / mm / transparent_hugepage / enabled- Я также добавил вышеупомянутую команду в /etc/rc.local, чтобы сохранить ее после перезагрузки. Опять же, это, кажется, было решено.
- Это было исправлено, как только я дал следующую команду:
ПРЕДУПРЕЖДЕНИЕ overcommit_memory установлено в 0! Фоновое сохранение может завершиться неудачей при нехватке памяти. Чтобы решить эту проблему, добавьте vm.overcommit_memory = 1 в /etc/sysctl.conf, а затем перезагрузите компьютер или выполните команду 'sysctl vm.overcommit_memory = 1', чтобы это вступило в силу.
Я выполнил следующую команду, чтобы попытаться бороться с этой ошибкой... кажется, что она появляется иногда:
echo "vm.overcommit_memory=1" >> /etc/sysctl.conf; sysctl -p
Эта ошибка случается время от времени
ПРЕДУПРЕЖДЕНИЕ. Настройка невыполненного TCP-протокола 511 не может быть применена, поскольку для /proc/sys/net/core/somaxconn установлено более низкое значение o
Я добавил следующее, выполнив команды:
echo "net.core.somaxconn=65536" >> /etc/sysctl.conf echo "net.ipv4.tcp_max_syn_backlog=8192" >> /etc/sysctl.conf
Чтобы убедиться, что они были добавлены... sysctl -p
Ниже приведен весь мой файл /etc/systemd/system/redis-server.service.
[Единица измерения] Описание =Redis Datastore Server После того, как =network.target [Обслуживание] Тип = разветвление PIDFile=/ вар / бег / Redis / redis.pid Пользователь = Redis Группа = WWW-данные LimitNOFILE=64000 PermissionsStartOnly= верно \# Создание и настройка разрешений для каталога PIDFile ExecStartPre=/bin/mkdir -p /var/run/redis ExecStartPre=/bin/chown redis:www-data /var/run/redis ExecStartPre=/bin/chmod 775 -R /var/run/redis \# Создание и настройка разрешений для каталога журналов \# Это закомментировано, потому что я получаю ошибки, что операция не разрешена. \#ExecStartPre=/bin/mkdir -p /var/log/redis \#ExecStartPre=/bin/chown redis -R /var/log/redis \#ExecStartPre=/bin/chmod 775 -R /var/log/redis \# Создание и настройка разрешений для файла журнала ExecStartPre=/bin/touch /var/log/redis/redis-server.log ExecStartPre=/bin/chown redis /var/log/redis/redis-server.log ExecStartPre=/bin/chmod 775 /var/log/redis/redis-server.log ExecStart=/sbin/start-stop-daemon --start --pidfile /var/run/redis/redis.pid --umask 007 --exec /usr/bin/redis-server - / etc / redis / redis. конф ExecReload=/bin/kill -USR2 $MAINPID ExecStop=/usr/bin/redis-cli shutdown Restart= всегда [Установить] WantedBy=multi-user.target
Я в своем уме. Я переключился на Redis-Server после того, как не смог заставить работать memcached. Единственный раз, когда memcached сработал, я опробовал его на своих сайтах WordPress, и это было СУПЕР быстро. Я был очень впечатлен и очень доволен выступлением. Однако, очевидно, я не могу заставить его работать, поэтому я прошу помощи.
3 ответа
Может быть маловероятно, так как вы не упоминаете другие изменения, я все равно выложу.
Возможно, это проблема IPv6 / IPv4. Если вы отключили IPv6 в любой момент, вы получите результат, который вы описали.
Посмотрите на /var/log/redis/redis-server.log. Вот что я нашел в моем:
17008:C 24 Aug 07:17:45.193 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
17008:C 24 Aug 07:17:45.193 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=17008, just started
17008:C 24 Aug 07:17:45.193 # Configuration loaded
17009:M 24 Aug 07:17:45.195 # Creating Server TCP listening socket ::1:6379:
bind: Cannot assign requested address
Redis пытался использовать IPv6 (::1:6379:). Я отключил IPv6 в этой системе (по причинам), однако конфигурация redis-cache по умолчанию включает как IPv4, так и v6. Если вы видите ошибку "Не удается назначить" в этом журнале, взгляните на /etc/redis/redis.conf. Конфигурация "из коробки" включает IPv6 (::1):
bind 127.0.0.1 ::1
Поэтому я удалил это, изменив его на:
bind 127.0.0.1
Redis начал сразу после этого.
Надеюсь, это поможет!
Дополнение к ответу @Chris, но с другой стороны. Был сервер Ubuntu с включенным IPv6, но redis-server
вместо этого пытался связать на IPv4...
11558:C 16 Mar 21:09:24.694 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
11558:C 16 Mar 21:09:24.694 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=11558, just started
11558:C 16 Mar 21:09:24.694 # Configuration loaded
11569:M 16 Mar 21:09:24.709 # Creating Server TCP listening socket 127.0.0.1:6379: bind: Address already in use
Решением было изменить redis.conf с:
bind 127.0.0.1
...быть:
bind 127.0.0.1 ::1
После этого все заработало... обязательно перезагрузите сервер после любых изменений, связанных с IP.
Попробуйте это (проверено Ubuntu 18.04):
sudo sh -c 'echo "httpd soft nofile 4096" >> /etc/security/limits.conf'
sudo sh -c 'echo "httpd hard nofile 10240" >> /etc/security/limits.conf'
sudo sh -c 'echo "fs.file-max = 100000" >> /etc/sysctl.conf'
sudo sh -c 'echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf'
sudo sh -c 'echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf'
sudo apt -y install redis-server redis-tools
sudo service redis-server stop
sudo sed -i '/^bind/s/bind.*/bind 0.0.0.0/' /etc/redis/redis.conf
if [ ! -d /var/run/redis ]; then sudo mkdir -p /var/run/redis && sudo chown redis /var/run/redis; fi
sudo service redis-server start
Источник: Ntopng maravento.com