У меня в фоновом режиме работает jar на сервере Ubuntu.
В определенный момент приложение начинает потреблять слишком много ЦП (400%), и 4 дочерних процесса остаются в состоянии R:
NB: проблема возникает НЕ из-за большого использования, она возникает сразу после определенное время (3-4 дня). Мы должны убить java и повторно запустить его.
РЕДАКТИРОВАТЬ ДОБАВИТЬ Журнал GC:
Я сделал java -verbose: Я попросил о помощи и подтвердил, что мой VirtualHost (доступен по запросу) предназначен для цепочки сертификатов и что промежуточный сертификат установлен правильно. Сайты отображаются без ошибок, о которых я знаю, в Chrome, Safari, Edge или Opera.
После некоторого поиска Let's Encrypt! выглядел как привлекательное предложение, и вскоре я получил ( AFAICT) закрытый ключ и сертификат для каждого домена в / etc / apache2 / sites-enabled, за исключением, конечно, любых доменов, которые больше не являются моими. Я подумал, что сделаю пробный запуск и сделаю HTTPS-соединение с сайтом, доступным теперь только по HTTP: JSH.name . Я переместил "Let's Encrypt!" сертификат и закрытый ключ в мой каталог SSL и добавил:
<VirtualHost *:443>
ServerAdmin cjshayward@pobox.com
DocumentRoot /home/jonathan/stornge
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/0000_csr-letsencrypt.pem
SSLCertificateKeyFile /etc/apache2/ssl/0000_key-letsencrypt.pem
ServerName jsh.name
ServerAlias www.jsh.name
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
CustomLog /home/jonathan/logs/stornge.com combined
<Directory /home/jonathan/stornge/>
Options ExecCGI Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Затем я перезагрузился, чтобы увидеть свою работу, и каждый запрос HTTP или HTTPS, который я делал, просто зависал. Это включало два домена на HTTPS с моим сертификатом StartSSL и домен, который должен был быть недавно доступен по HTTPS, доступ к которому осуществляется через HTTP и HTTPS. Я закомментировал VirtualHost и отказал Apache, и все старые функции снова вернулись в рабочее состояние.
Я использовал Let's "Encrypt!" правильно? Я немного подозрительно, поскольку существующая конфигурация SSL имеет закрытые ключи с расширением .key, расширение сертификата .crt и файл цепочки сертификатов с расширением .pem.
Я попробовал еще раз, проверив каталог SSL и обнаружив, что 0000_csr.letsencrypt.pem был режимом 644; Я изменил все файлы в этом каталоге на режим 600. Когда я попробовал несколько минут назад, я повторил старое поведение: веб-сайт зависает при всех запросах и, кроме того, com Файл конфигурации Apache содержит два VirtualHosts, один для обслуживания http://OrthodoxChurchFathers.com , а другой для перенаправления http://www.OrthodoxChurchFathers.com запросов к http://OrthodoxChurchFathers.com . Файл .conf, содержащий оба виртуальных хоста:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName orthodoxchurchfathers.com
#ServerAlias www.orthodoxchurchfathers.com fathers.jonathanscorner.com
DocumentRoot /home/cjsh/fathers/document_root
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/cjsh/fathers>
Options ExecCGI FollowSymLinks Indexes MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
DirectoryIndex index.cgi index.html
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerAdmin CJSHayward@POBox.com
ServerName www.orthodoxchurchfathers.com
ServerAlias fathers.jonathanscorner.com
DocumentRoot /home/cjsh/oldmirror
RewriteEngine On
RewriteRule ^(.*)$ http://orthodoxchurchfathers.com$1 [R=301,L]
</VirtualHost></pre></code>
When I try to run it and request orthodoxchurchfathers.com alone, I get:
┌──────────────────────────────────────────────────────────────────────┐
│ We were unable to find a vhost with a ServerName or Address of │
│ orthodoxchurchfathers.com. │
│ Which virtual host would you like to choose? │
│ (note: conf files with multiple vhosts are not yet supported) │
│ ┌──────────────────────────────────────────────────────────────────┐ │
│ │1 008-stornge.conf | Multiple Names | │ │
│ │2 014-paraskeva.conf | paraskeva.jonathansco | │ │
│ │3 036-unixytalk.conf | unixtalk.jsh.name | │ │
│ │4 038-proxy.conf | Multiple Names | │ │
│ │5 027-anna.conf | Multiple Names | │ │
│ │6 044-jobhunt-tracker.creation.c | Multiple Names | │ │
│ │7 049-jsh.conf | Multiple Names | │ │
│ │8 001-steampunk.conf | | │ │
│ │9 006-blajeny.conf | Multiple Names | │ │
│ │10 032-videos.conf | Multiple Names | d│ │
│ └────↓(+)──────────────────────────────────────────────────30%─────┘ │
├──────────────────────────────────────────────────────────────────────┤
│ │
└──────────────────────────────────────────────────────────────────────┘
Я использовал команду с ./letsencrypt-auto --debug certonly.
Я написал пару инструкций по запуску SSL-сертификатов Let's Encrypt на CentOS: начальная настройка и его установка .
И мой для каждого домена (я использую соглашение об именах файлов z - <[sub-] domain-tld> .conf
) Файлы конфигурации Apache выглядят следующим образом:
<VirtualHost *:80>
ServerName domain.tld
Redirect permanent / https://domain.tld/
</VirtualHost>
<VirtualHost *:443>
SSLCertificateFile /etc/letsencrypt/live/domain.tld/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.tld/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/domain.tld/fullchain.pem
DocumentRoot /var/www/domain
ServerName domain.tld
ErrorLog logs/domain-error_log
CustomLog logs/domain-access_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
ServerAdmin user@domain.tld
SSLEngine on
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
<Directory "/var/www/domain">
Options All +Indexes +FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
А мой ssl.conf выглядит так :
#SSL options for all sites
Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
Mutex sysvsem default
SSLRandomSeed startup file:/dev/urandom 1024
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
SSLCompression off
SSLHonorCipherOrder on
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
Использование Let's Encrypt для получения сертификатов SSL (и повышение рейтинга вашего сайта до «А» от SSL Labs ) довольно прямолинейно - как только вы пройдете некоторые тайны Apache конфигурации и аргументы командной строки LE.
Я обнаружил, что клиент ACME работает хорошо, его легко настроить и приступить к работе, он регулярно обновляется и его легко обновлять, и он очень хорошо работает на Amazon Linux. Я написал по нему руководство, которое вы можете найти здесь .
Начните с загрузки ACME и его настройки
https://github.com/hlandau/acme.git
cp ./acmetool /usr/local/bin
/usr/local/bin/acmetool quickstart
Запросите сертификат
./acmetool want example.com www.example.com
Вот как я настроил каталог для проблема - здесь Let's Encrypt подключается к вашему серверу для проверки
mkdir -p /var/www/acme-challenge/.well-known/acme-challenge
chmod -R user:www-data /var/www/acme-challenge/*
find /var/www/acme-challenge/ -type d -exec chmod 755 {} \;
vi /var/www/acme-challenge/.well-known/acme-challenge/text.html (add "hello world!" or similar)
На указанном выше веб-сайте есть более подробные сведения и комментарии, а также автор и сообщество.
У меня был хороший успех с использованием EFF Certbot в корневом веб-режиме (потому что идея автоматического процесса остановки веб-сервера, пусть даже ненадолго, во время обновления сертификата пугает меня
Сначала установите Certbot. Если вы используете Debian Jessie (который актуален на момент написания этой статьи), сначала добавьте репозиторий jessie-backports
, затем
$ sudo apt-get install python-certbot-apache -t jessie-backports
. Это принесет несколько пакетов плюс сам certbot.
Затем, чтобы создать сертификат в режиме webroot , запустите что-то вроде
$ sudo certbot certonly --webroot -w /srv/www/www.example.net/htdocs -d www.example.net
Вы можете дополнительно добавить - register-unsafely-without-email
, а также - -rsa-key-size X
, если вам нужен размер модуля, отличный от значения по умолчанию (который в настоящее время составляет 2048 бит). -d fqdn.example.com
может повторяться произвольное количество раз, как и -w
; каждый -w
запускает новый набор доменов, обслуживаемых из каталога, доменов с именами -d
. Let's Encrypt не выдает сертификаты с подстановочными знаками (это упоминается в их часто задаваемых вопросах) и, по-видимому, также не сертификаты для доменных имен Punycode.
Пользователь, который certbot
работает по мере необходимости, по крайней мере и по умолчанию , доступ на запись к нескольким местам в / etc / letsencrypt
. Вероятно, проще всего запустить его как root. Он создаст файл под .well-known / acme-challenge
в заданном корневом веб-каталоге ( -w
), и удаленная система убедится, что он доступен по указанным доменным именам через HTTP , и если все будет проверено, будет создана куча файлов PEM в /etc/letsencrypt/archive/www.example.net
плюс соответствующий набор символических ссылок в /etc/letsencrypt/live/www.example.net
и напечатайте дружеское сообщение об успешном завершении.
Если все прошло успешно, вам остается настроить свой веб-сервер для использования сертификата, найденного в подкаталоге имени хоста / etc / letsencrypt / live
для HTTPS для домена в вопрос. Абсолютный минимум для этого для Apache выглядит примерно так:
<VirtualHost *:443>
ServerName www.example.net
SSLEngine on
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.net/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/www.example.net/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.example.net/chain.pem
</VirtualHost>
Добавьте любые другие директивы по желанию, проверьте с помощью apache2ctl -S
и apache2ctl configtest
, что все прошло проверку, и активируйте виртуальный хост HTTPS с apache2ctl graceful
.
Не забывайте регулярно обновлять сертификат; в настоящее время сертификаты Let's Encrypt истекают через 90 дней. Пакет Debian поставляется с заданием cron в /etc/cron.d/certbot
и службой systemd в /lib/systemd/system/certbot.service
, которые заботятся об этом, или вы можете запустить certbot refresh
вручную. Не забудьте apache2ctl graceful
, чтобы начать использовать только что выданный сертификат; вы можете настроить задание cron или службу systemd, чтобы это выполнялось автоматически. Чтобы автоматически загружать обновленные сертификаты в Apache на Debian Jessie, рассмотрите возможность обновления /lib/systemd/system/certbot.service
, чтобы добавить в раздел [Service]
(примечание: порядок важен ):
ExecStartPost=/usr/sbin/apache2ctl configtest
ExecStartPost=/usr/sbin/apache2ctl graceful
Это автоматически загрузит обновленный сертификат , если файлы конфигурации Apache пройдут configtest
, и укажут Certbot как сбойный, если configtest
или изящный
не работает.