Tomcat の一般的な例外と解決コードの例

Tomcat の一般的な例外と解決コードの例

弊社のプロジェクトは Java で開発され、ミドルウェアは Tomcat でした。運用中に、Tomcat でいくつかの例外が発生しました。参考までに、例外と解決策を以下に記録します。 (随時追加中…)

異常1:

1. ログの内容

org.apache.coyote.http11.AbstractHttp11Processor.process HTTP リクエスト ヘッダーの解析エラー
注意: HTTP ヘッダー解析エラーがさらに発生すると、DEBUG レベルでログに記録されます。
java.lang.IllegalArgumentException: メソッド名に無効な文字が見つかりました。HTTP メソッド名はトークンである必要があります
org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:233) で
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017) で
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) で
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) で
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) で
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) で
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) で
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) で
java.lang.Thread.run(Thread.java:745) で

2. 解決策

tomcat インストール フォルダーの conf/catalina.properties ファイルに次の行を追加します。

org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

例外2:

1. ログの内容

com.alibaba.druid.stat.DruidStatService]mbean の登録解除エラー
javax.management.InstanceNotFoundException: com.alibaba.druid:type=DruidStatService
	com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095) で
	com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.exclusiveUnregisterMBean(DefaultMBeanServerInterceptor.java:427) で
	com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.unregisterMBean(DefaultMBeanServerInterceptor.java:415) で
	com.sun.jmx.mbeanserver.JmxMBeanServer.unregisterMBean(JmxMBeanServer.java:546) で
	com.alibaba.druid.stat.DruidStatService.unregisterMBean(DruidStatService.java:374) で
	com.alibaba.druid.stat.DruidDataSourceStatManager.removeDataSource(DruidDataSourceStatManager.java:202) で
	com.alibaba.druid.pool.DruidDataSource$2.run(DruidDataSource.java:1479) で
	java.security.AccessController.doPrivileged(ネイティブメソッド)
	com.alibaba.druid.pool.DruidDataSource.unregisterMbean(DruidDataSource.java:1475) で
	com.alibaba.druid.pool.DruidDataSource.close(DruidDataSource.java:1434) で
	sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) で
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) で
	java.lang.reflect.Method.invoke(Method.java:606) で
	org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod(DisposableBeanAdapter.java:354) で
	org.springframework.beans.factory.support.DisposableBeanAdapter.destroy(DisposableBeanAdapter.java:277) で
	org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroyBean(DefaultSingletonBeanRegistry.java:578) で
	org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingleton(DefaultSingletonBeanRegistry.java:554) で
	org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingleton(DefaultListableBeanFactory.java:972) で
	org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.destroySingletons(DefaultSingletonBeanRegistry.java:523) で
	org.springframework.beans.factory.support.DefaultListableBeanFactory.destroySingletons(DefaultListableBeanFactory.java:979) で
	org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1006) で
	org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:982) で
	org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:934) で
	org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:583) で
	org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:116) で
	org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4900) で
	org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5537) で
	org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:221) で
	org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1424) で
	org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1413) で
	java.util.concurrent.FutureTask.run(FutureTask.java:262) で
	java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) で
	java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) で
	java.lang.Thread.run(Thread.java:745) で

2. 解決策

tomcat の bin ディレクトリにある catalina.sh ファイルを変更し、# OS 固有のサポートの間に JAVA_OPTS="-Ddruid.registerToSysProperty=true" を追加します。$var は true または false に設定する必要があります。および cygwin=false

例外3:

1. ログの内容

INFO [http-nio-80-exec-16] org.apache.coyote.http11.AbstractHttp11Processor.process HTTP リクエスト ヘッダーの解析エラー
 注意: HTTP ヘッダー解析エラーがさらに発生すると、DEBUG レベルでログに記録されます。
 java.lang.IllegalArgumentException: メソッド名に無効な文字が見つかりました。HTTP メソッド名はトークンである必要があります
	org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:236) で
	org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1065) で
	org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) で
	org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539) で
	org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495) で
	java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) で
	java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) で
	org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) で
	java.lang.Thread.run(Thread.java:745) で

2. 解決策

tomcat インストール フォルダーの conf/server.xml を変更します。<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" maxHttpHeaderSize ="10240" redirectPort="8443" /> では、maxHttpHeaderSize の既定値は 8*1024 です。必要な値に調整するだけです。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • SpringBoot プロジェクトがパッケージ化され、外部の Tomcat に公開されます (さまざまな例外を解決)
  • セマフォによるTomcatの異常終了の解決方法
  • Tomcat での jar のロードに関する異常な問題の分析と解決
  • tomcat6 の jsp でこの応答に対して getOutputStream() が既に呼び出されている例外の原因と解決策
  • tomcat の起動時にエラーが発生しました: プロキシが例外をスローしました: java.rmi.server.ExportException: ポートは既に使用されています: 1099 解決策
  • idea2020.2 が pom.xml ファイル Maven プラグイン tomcat7 でエラーに遭遇する問題を解決する
  • IDEA 構成の Tomcat 起動エラーの問題を解決する
  • SSM プロジェクトを Idea にインポートした後、Tomcat を起動するとエラー 404 が発生する問題を解決します。
  • Tomcat 起動エラー: java.util.zip.ZipException の解決方法
  • Tomcat 例外の解決方法 (リクエスト ターゲットに無効な文字が見つかりました。有効な文字は RFC 7230 および RFC 3986 で定義されています)

<<:  VUEはG2チャートを使用した実装を導入します

>>:  MySQL のインデックス障害の一般的なシナリオと回避方法

推薦する

JavaScript を使って簡単な計算機を書く

効果は以下のとおりです。参考プログラム: <!DOCTYPE html> <htm...

MySQL テーブルとデータベース シャーディングのアプリケーション シナリオと設計方法

多くの友人がフォーラムやメッセージエリアで、どのような状況で MySQL をシャーディングする必要が...

Vueプロジェクトのフロントエンドを最適化およびパッケージ化するための必須のボーナスアイテム

目次序文1. ルーティングの遅延読み込み1. ルートの遅延読み込みが必要なのはなぜですか? 2. ル...

HTML にネストされた div の無効なマージンに対する解決策

div がネストされているときに margin が機能しない問題の解決策を次に示します。さて、マージ...

MySQL テーブルを作成するためによく使用される SQL ステートメントの概要

最近、私はプロジェクトに取り組んでおり、背景を記述するために SQL ステートメントを使用する必要が...

Linuxでawkを使用する方法の詳細な説明

awk を学ぶ前に、sed、grep、tr、cut などのコマンドを学んでおく必要があります。これら...

mysql インストーラ コミュニティ 8.0.12.0 インストール グラフィック チュートリアル

このチュートリアルでは、参考のためにmysqlインストーラコミュニティ8.0.12.0のインストール...

Vue プロジェクト @change 複数のパラメータを使用して複数のイベントを渡す

まず、変更イベントは 1 つだけです。 changelevel() //値を選択選択を変更して行の値...

HTMLはキャンバスを使用して箇条書きスクリーン機能を実装します

導入最近、大きな課題をこなす際に、弾幕プレイヤーを作る必要がありました。他の人のソースコードを借りて...

MySQL 8.0.19 では、間違ったパスワードを 3 回入力するとアカウントがロックされるようになりました (例)

MySQL 8.0.19 では、間違ったパスワードを 3 回入力するとアカウントがロックされるよう...

Docker のインストールと構成イメージの高速化の実装

目次DockerバージョンCentOS に Docker エンジンをインストールするシステム要件古い...

Angularルーティングの基礎の詳細な説明

目次1. ルーティング関連オブジェクト2. ルーティングオブジェクトの場所3. ルーティング構成4....

xHTML タグと HTML タグの違いは何ですか?

すべてのタグは小文字でなければなりませんXHTML では、すべてのタグは小文字でなければなりません。...

初心者向けの MySQL のインストール方法 (効果が実証済み)

1. ソフトウェアのダウンロードMySQL のダウンロードとインストール:公式サイトのダウンロード...

require loaderの実装原理の深い理解

序文Node は新しいプログラミング言語ではなく、JavaScript のランタイムに過ぎないとよく...