Процесс Java остается в рабочем состоянии и потребляет ресурсы ЦП

У меня в фоновом режиме работает jar на сервере Ubuntu.

В определенный момент приложение начинает потреблять слишком много ЦП (400%), и 4 дочерних процесса остаются в состоянии R:

HTOP state before/after problem

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
&lt;Directory />
    Options FollowSymLinks
    AllowOverride None
&lt;/Directory>
&lt;Directory /home/cjsh/fathers>
    Options ExecCGI FollowSymLinks Indexes MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
&lt;/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/"
&lt;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
&lt;/Directory>

</VirtualHost>

&lt;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]
&lt;/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.

5
задан 6 April 2016 в 22:03
3 ответа

Я написал пару инструкций по запуску 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.

3
ответ дан 3 December 2019 в 01:43

Я обнаружил, что клиент 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)

На указанном выше веб-сайте есть более подробные сведения и комментарии, а также автор и сообщество.

1
ответ дан 3 December 2019 в 01:43

У меня был хороший успех с использованием 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 или изящный не работает.

0
ответ дан 3 December 2019 в 01:43

Теги

Похожие вопросы