#73 Knowledge v1.12.0 heroku環境におけるエラー

 [Public]
icon written by stray at Apr 26, 2018 10:40 AM
  Edit(Sign in)
  Stock
  Answer survey   Answer survey

  TOC

初めまして
お世話になっております。

今週からKnowledgeを利用させていただいております。

Deploy to HerokuにてKnowledge v1.12.0を構築させていただきましたが、定期的に以下のエラーが発生しております。
エラー後はデータベースの接続先変更情報がPostgresから組込DBに戻っており、Postgresに毎度再設定しなおすと復旧するといった状況になっております。
この件に関しまして、何かアドバイスを頂けたらと思います。

ERROR 2018-04-26 08:44:33,171 ControlManagerFilter(81) ERROR SEND
ERROR 2018-04-26 08:44:33,174 LoggingFilter(65) Any exception is thrown. [javax.servlet.ServletException]
javax.servlet.ServletException: javax.servlet.ServletException: org.support.project.common.exception.SystemException: 
    at org.support.project.web.filter.AuthenticationFilter.doFilter(AuthenticationFilter.java:303)
    at org.support.project.knowledge.filter.CloseAbleAuthenticationFilter.doFilter(CloseAbleAuthenticationFilter.java:114)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.support.project.knowledge.filter.ApiFilter.doFilter(ApiFilter.java:72)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.support.project.web.filter.LoggingFilter.doFilter(LoggingFilter.java:63)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.support.project.web.filter.SeqFilter.doFilter(SeqFilter.java:31)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.support.project.web.filter.EncodingFilter.doFilter(EncodingFilter.java:36)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.servlet.ServletException: org.support.project.common.exception.SystemException: 
    at org.support.project.web.filter.ControlManagerFilter.doFilter(ControlManagerFilter.java:91)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.support.project.knowledge.filter.MaintenanceModeFilter.doFilter(MaintenanceModeFilter.java:85)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.support.project.web.filter.MultipartFilter.doFilter(MultipartFilter.java:63)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.support.project.web.filter.AuthenticationFilter.doFilter(AuthenticationFilter.java:187)
    ... 29 more
Caused by: org.support.project.common.exception.SystemException: 
    at org.support.project.common.util.ObjectUtils.invoke(ObjectUtils.java:136)
    at org.support.project.web.common.InvokeTarget.invoke(InvokeTarget.java:109)
    at org.support.project.web.filter.ControlFilter.invoke(ControlFilter.java:30)
    at org.support.project.web.filter.ControlManagerFilter.doFilter(ControlManagerFilter.java:67)
    ... 38 more
Caused by: java.lang.reflect.InvocationTargetException
    at org.support.project.common.util.ObjectUtils.invoke(ObjectUtils.java:132)
    ... 41 more
Caused by: java.lang.NullPointerException
    at org.support.project.web.control.Control.getLoginUserId(Control.java:514)
    at org.support.project.knowledge.control.open.KnowledgeControl.list(KnowledgeControl.java:381)
    ... 42 more
INFO  2018-04-26 08:44:33,177 LoggingFilter(101) GET    https://xxx.herokuapp.com/open.knowledge/list    500    221.112.38.178    43[ms]
WARN  2018-04-26 08:44:33,568 Control(70) Error on get user notification count. NullPointerException
INFO  2018-04-26 08:44:33,577 LoggingFilter(101) GET    https://xxx.herokuapp.com/open.account/icon/-2147483648    200    221.112.38.178    10[ms]
WARN  2018-04-26 08:44:43,279 Control(70) Error on get user notification count. NullPointerException

 Attach Files     - [0]


 Comment
[Registration] Apr 26, 2018 11:23 PM [Koda]
icon

Heroku の運用プランは Free でしょうか?
Freeの場合、30分間アクセスが無いとインスタンスが破棄され、再度アクセスした際にインスタンスを再度作成するとった動きになるようです。インスタンス破棄の際に、接続設定も破棄されてしまいます。(インスタンスが破棄されることが嫌だったので、5分毎にCurlで定期的にアクセスしてみたのですが、それでも不定期にインスタンスは破棄されるみたいです)

もう少し詳細に説明すると、以下になります。
Knowledgeではデータ格納ディレクトリ1 に、組み込みDBからPostgreSQLへの接続へと接続を切り替え用設定のファイル「custom_connection.xml」を格納します。このファイルは、Herokuの稼働中インスタンスのローカルファイルとして保持されるので、インスタンスが破棄されて、新しいインスタンスが起動時には、前のインスタンスで設定していた設定ファイルが復元されるわけではありません。この「custom_connection.xml」の設定が無い場合、ディフォルトの接続先である、組み込みDBに接続しにいくため、接続先が組込DBに戻っている現象が発生します。

そのようなわけですので、HerokuのFreeプランのように、インスタンスが定期的に変更になってしまう環境でのKnowledgeの運用は、「今のところは」大変申し訳無いのですがオススメできません。もし、HerokuのFreeプラン利用でしたら、サーバーの変更をご検討ください。

ただし、このままですとサービスの負荷が高くなってきた場合に、オートスケールするような構成の場合にもうまくスケールできないわけなので、もっとちゃんと作らなければ、、、と考えています。
例えば、DBの接続先の設定は、環境変数で指定できるようにするなどです。ただし、DBの接続設定はそれで良いのですが、全文検索エンジンのインデックスや、スライドショーのための抽出した画像ファイルもローカルのストレージに持ってしまっているので、それらも含めて対応する必要があるので、直ぐに対応できそうにありません。(環境変数だけの改修ならば、直ぐできるのですが、、、)


  1. 「データ格納ディレクトリ」は、デフォルトでユーザのホームの中の「.knowledge」ディレクトリになり、環境変数「KNOWLEDGE_HOME」で場所を変更可能です

 Like! × 0  
Collapsed
[Registration] Apr 27, 2018 9:01 AM [stray]
icon

回答ありがとうございます!

まずは試験的にということで、Freeプランで構築してみたので別の環境に構築を検討いたします。

早々の回答ありがとうございました。


 Like! × 1  
Collapsed



 Add Comment