インタビューの質問Tomcat

最近面试了几家公司,总结了几个共性的问题。首先研究的是tomcat及先关应用。

Q1:Tomcatは最初にアプリケーションパッケージをロードしますか、それともlibの下のパッケージを最初にロードしますか?
この質問では、クラスローディングメカニズムの理解を調べます。
JVMクラスのロードメカニズムは、親の委任の原則です。つまり、サブクラスローダーは、最初に.classファイルをロードする必要があることを見つけ、それをロードしません。それを行うには、親クラスに委任し、ルートクラスローダー-BootstrapClassLoaderに委任します。このとき、親クラスローダーがロードできない場合は、ロードが完了するまで、レイヤーごとに子クラスに渡されてロードされます。これにより、作成したjava.long.StringクラスがJDKをオーバーライドしないことが保証されます。
親の委任の原則は助言であり、すべてが遵守されているわけではありません。
Tomcatクラスのロードメカニズムは異なります。複数のプロジェクトパッケージをtomcat webappの下に配置できるため、各プロジェクトパッケージには同じサードパーティjarパッケージの異なるバージョンが含まれる可能性があります。親の委任に従うと、サードパーティパッケージはすべて同じバージョンになります。間違っています。したがって、tomcatクラスのロードメカニズムは逆になります。webappローダーは、最初にプロジェクトに必要な.classファイルをロードします。ロードできない場合は、ルートローダーまで渡されます。
Q2:postメソッドとgetメソッドの違いは何ですか?getメソッドによって渡されるパラメーターのサイズに上限はありますか?もしそうなら、誰が制限していますか?
まず第一に、セキュリティ、可視性、キャッシングなどに対するpostメソッドとgetメソッドの違いです。言うまでもなく、以下のリンクを参照できます。ここでの焦点は、次のパラメーターの上限にあります。投稿はなく、取得があります。通常は2048文字です。
しかし、2048を転送することは本当に可能ですか?答えは必ずしもではなく、ブラウザとWebサーバーによって制限されており、ブラウザによって制限が異なります。一部のコードの友人はそれをテストし、以下のリンクに入れました。
Q3:Tomcatのポート8009の用途は何ですか?
tomcatのポート8080は通常、デプロイされたアプリケーションへのアクセスに使用され、クライアントプログラムとのリンクを確立してクライアント要求を受け入れるためのHTTP汎用サービスを提供することは誰でも知っています。もちろん、このポートは、confの下のservice.xmlで必要なものに変更することもできます。
しかし、構成クラスにはYege 8009ポートもあります。これは実際にはAJPプロトコルに使用され、他のHTTPサーバーとの接続の確立を担当します。このポートは、Tomcatを他のHTTPサーバーと統合するときに必要です。
Q4:Tomcatのチューニングは?
ここでのチューニングは2つの部分に分かれています。1つはTomcat動作環境のjvmチューニングで、もう1つはTomcat自体のチューニングです。
JVMチューニング:tomcatパス
設定の下のbin \
catalina.sh(
catalina.bat )ファイルJAVA_OPTS = -server -Xms1400M -Xmx1400M
-Xmn170m
-Xss512k
-XX:+ AggressiveOpts
-XX:+ UseBiasedLocking
-XX:PermSize = 128M
-XX: MaxPermSize = 256M
-XX:+ DisableExplicitGC
-XX:MaxTenuringThreshold = 31
-XX:+ UseConcMarkSweepGC
-XX:+ UseParNewGC
-XX:+ CMSParallelRemarkEnabled
-XX:+ UseCMSCompactAtFullCollection
-XX:LargePageSizeInBytes = 128m
-XX:+ UseFastAccessorMethods
-XX:+ UseCMSInitiatingOccupancyOnly
-Djava.awt.headless = true
サーバー構成は、tomcatが実際の本番モードで実行され、より多くのリソースがある
ことを示します; xmsおよびxmxは、jvmによって使用される最大および最小ヒープメモリを示します。jvmは、最大の使用に基づきます最小値の間で占有されているメモリを動的に調整します。ただし、サイズ間でメモリを再利用するときにガベージコレクタが前後に切り替わるのに影響し、時間がかかります。したがって、これらの2つの値は通常、マシンの物理メモリの約1/4の意味のある値に設定されています。
Xmn、永続的な世代のサイズは通常64mに固定されているため、若い世代を増やすと古い世代のサイズが小さくなります。この値はシステムパフォーマンスにより大きな影響を与えます。Sunの公式推奨構成は、ヒープ全体の3/8です。
Xss、各スレッドのスタックサイズ、デフォルト値は1Mで、アプリケーションスレッドが必要とするメモリサイズに応じて調整できます。同じ物理メモリでこの値を減らすと、より多くのスレッドが生成される可能性があります。ただし、オペレーティングシステムにはプロセス内のスレッド数にも制限があり、無制限に生成することはできません。エクスペリエンス値は約3000〜5000です。
一般に、これらはほとんど同じです。
Tomcatパフォーマンスチューニング:server.xmlファイル。ポート8080を見つけ、そこで構成します。
maxThreads = "300":同時Tomcatの現在の最大数を設定します。Tomcatが構成するリクエストの最大数はデフォルトで150ですが、実際の使用では、同時リクエストの最大数はハードウェアのパフォーマンスとCPUの数に密接に関連しています。これは、ユーザーのハードウェアに応じて決定されます。
minSpareThreads =“ 50”:Tomcatの初期化時に作成される現在のスレッド数を設定しますデフォルト値は25です。
acceptCount =“ 250”:同時に接続されているユーザーのスレッドがmaxThreadsパラメータで設定された値に到達すると、キューに入れられた接続の数も受け取ることができます。この数を超えると、接続は直接拒否されます。デフォルト値は100です。実際のアプリケーションでは、同時Tomcatの数を増やしたい場合は、acceptCountとmaxThreadsの値も増やす必要があります。
enableLookups =“ false”:ドメイン名の逆検索を有効にするかどうか。通常、falseに設定して処理能力を向上させます。その値はtrueであり、ほとんど使用されません。
maxKeepAliveRequests = "1":nginxはTomcatに動的に転送され、nginxはキープアライブを実行できず、キープアライブはTomcat側でデフォルトで有効になり、キープアライブタイムアウトを待機します。デフォルトでは、connectionTimeoutは設定されていません。したがって、tomcatのタイムアウトを設定し、tomcatのキープアライブをオフにする必要があります。そうしないと、tomcatのソケットの待機時間が多くなります。maxKeepAliveRequests =” 1”は、tomcatが多数のTIME_WAIT接続を生成することを回避できるため、tomcatがある程度死ぬのを回避できます。

参照接続:
https : //blog.csdn.net/fd2025/article/details/80592099
https://blog.csdn.net/qq_44721831/article/details/98471707
https://blog.csdn.net/iteye_18297/article /詳細/ 82158790
https://blog.csdn.net/qq_36485859/article/details/101056799

元の記事を6件公開 ・いい ね0 訪問数354

おすすめ

転載: blog.csdn.net/weixin_44863376/article/details/104979003