私は、LXC(つまり、「ゲスト」)を使用して、いくつかのコンテナーを実行するシステム(「ホスト」)を持っています。私はゲストの中にJenkinsをインストールしましたが、それらは appear が意図したとおりに機能するように見えますが、ただししない要求に応答します。 (LXCを含むいくつかのJenkinsのインストールは成功しています。)この場合、観察された問題は、組み込みのJenkins Webサーバー(Jetty)がHTTPリクエストに応答していないことです。実行中のLXCゲストそのもの、つまりlocalhost
を指します。
私はこの問題の解決に数日間取り組んできましたが、成功しませんでした。
localhost
からJenkins Webサーバーに接続しようとすると、次のようになります。
root@base:~# curl -vI http://localhost:8080/jenkins/
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> HEAD /jenkins/ HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.58.0
> Accept: */*
>
動作中の設定では、認証されていないためHTTP-403が返され、応答に1〜2秒はかかりませんが、数時間経っても応答がありません。 Jenkinsログファイルもエラーを報告しません。
Jenkinsのインストールが意図したとおりに機能し、アクセス可能になるように、この問題の根本的な原因を解決するのに助けが必要です。
この問題を見つけて修正するために何をどこで探すかについてのポインタはありますか?
これは私がすでに調べたいくつかのことです:
/etc/default/jenkins
の構成ファイルは、他の作業用セットアップに似ており、最小限の変更(たとえば、localhostのみへのバインド、および接頭辞)があります。/var/log/jenkins/jenkins.log
にあるJenkinsログファイルは、通常、Java例外からのスタックトレースとして表示される)問題を報告しません。iptables -S
):すべてのチェーン/ルール(INPUT
、FORWARD
、およびOUTPUT
)はACCEPT
に設定されます。それでも、ここでの通信はlocalhost
内にあるため、他のファイアウォールルールが適切に設定されていても、問題は発生しません。netstat -tapon
):予想されるポート(デフォルトは8080ですが、他のポートを試しました)で待機しているJenkins(Javaプロセス)を表示します。また、ESTABLISHED
クライアントが上記のようなリクエストを送信した後、接続を(両端で)curl
として示します。これは、成功したTCPハンドシェイクを示しています。tcpdump -i lo
):作成された3ウェイハンドシェイクを示します。 netstat
が接続をESTABLISHED
として表示する理由を説明しています。jetty-9.4.z-SNAPSHOT; built: 2018-06-05T18:24:03.829Z
として報告されます。この.z-SNAPSHOT
という名前のバージョンは Jetty releasesページ にないため、ビルドに基づいて最も近い一致を使用しましたこのテストの日付:9.4.11.v20180605
)update-alternatives --config Java
)。同じ非応答動作が観察されます。私がすでに見てきたが、関連も役に立たなかった質問のいくつか:
私はこれらよりずっと多くを読みました。それらは単なるサンプルです。
1 確認する唯一の方法です...ほとんど...
Jenkinsをホストしているシステムに70以上CPUがある場合、Jenkins/Jettyがスタックします動作しません。 Jenkinsを実行するシステム/コンテナのCPUが70未満であることを確認するか、アップグレードしてくださいJenkinsのインストールが2.138。2になり、本日(2018-10-10)にリリースされました。
Ubuntu 18.04 LTSリポジトリのJenkins 2.138。1にバグがあり、Jenkins/Jettyが70またはより多くのCPU。 Jenkins 2.138。2は2018年10月10日に本日リリースされ、いくつかの根本的な問題の修正が含まれており、そのうちの1つが実行した問題の原因でしたに。
変更ログは ここ です。私にとっての主な修正はこれです:
このバグ修正で問題が実際に修正されたことを確認でき、72 CPU搭載のサーバーでこれを確認しました。
Jenkinsインストールを(まだ)アップグレードできない場合は、潜在的な回避策を読んでください。
LXC内にJenkinsをインストールする場合は、次のコマンドでこれを制御できます。
lxc config set <container> limits.cpu N
、 どこ N < 70
;そしてlxc exec <container> -- systemctl restart jenkins.service
次のようにして、プロファイル構成を更新する必要がある場合もあります。
lxc profile set <container-profile> limits.cpu N
同じ警告がすでに上に表示されています。仮想マシン(VirtualBox、VMwareなど)を使用している場合でも、VMで使用可能なCPUの数を設定できるはずです。
P.S.:Pavelの his post に感謝します。これにより、CPU /コアの数を試すのに正しい方向に導いてくれました。
これは同じ問題のより詳細な説明です https://issues.jenkins-ci.org/browse/JENKINS-33412
以前のJenkinsバージョンでは、基になるjettyで使用されるスレッドの数が40に制限されています(handlerCountMaxオプション)。そしてデフォルトでは、jettyはセレクターにRuntime.getRuntime()。availableProcessors()/ 2スレッドを使用します。また、CPUコアの数が十分に多い(70など)か、Jetty sslコネクターも開始されており、CPUコアの数が36を超える場合、スレッドが使い果たされ、httpリクエストがスタックします。最新のjenkinsへの移行を検討し、手動でjettyのスレッド数を定義してください-これらのjettyパラメータ-qtpMaxThreadsCount、jettyAcceptorsCount、jettySelectorsCountを確認してください。