网站需要一段时间 return 500 Internal server error
Taking a while for website to return 500 Internal server error
这是 的后续问题。
不确定这是播放问题还是网络服务器的正常结果。我正在使用 play 2.1.2
我有一个网站,如果一切正常,它会立即 returns http 代码 200。
如果站点出于某种原因有问题,它不会立即 return 500 内部服务器错误。似乎需要 5 分钟才能最终 return 500 错误。
这是在 运行 我们的网站上使用播放框架时出现的问题,还是我应该检查其他问题以了解为什么会发生这种情况?我还使用来自 python 的 httplib 来检查网站。
我不知道要添加哪些其他详细信息来帮助调试,但希望简单的答案是播放框架正在对站点执行某些操作并且在超时(5 分钟)之前不会回复 500 代码已经过去了。
更新:附件是我用我的脚本点击它时来自服务器的消息。这是在测试服务器上,所以我预计它会失败。我执行 ulimit -n 275
导致服务器出现文件不足错误。
这是我从我的脚本中得到的错误,如果我 运行 它在导致问题的 5 分钟内:
got some exception
Traceback (most recent call last):
File "monitorAlive.py", line 27, in <module>
main()
File "monitorAlive.py", line 24, in main
get_status_code(host)
File "monitorAlive.py", line 16, in get_status_code
if resp == 200:
UnboundLocalError: local variable 'resp' referenced before assignment
但是,如果我等待 5 分钟以上,然后我 运行 我的脚本来检查站点,这就是我得到的:
didn't get a 200 http response. something wrong
this is the code we got: 500
这些是我导致文件不足错误时的日志消息。我的脚本不会导致网络服务器记录任何其他消息,但我 运行 我的脚本故意导致 site/server 出现问题,所以这些消息来自我,导致文件不足错误。
! @70jo4chan - Internal server error, for (GET) [/] ->
play.api.PlayException: Not initialized[?]
at play.core.ReloadableApplication.<init>(ApplicationProvider.scala:92) ~[play_2.10.jar:2.1.2]
at play.core.server.NettyServer$$anonfun$mainDev.apply(NettyServer.scala:273) ~[play_2.10.jar:2.1.2]
at play.core.server.NettyServer$$anonfun$mainDev.apply(NettyServer.scala:272) ~[play_2.10.jar:2.1.2]
at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10.jar:2.1.2]
at play.core.server.NettyServer$.mainDev(NettyServer.scala:271) ~[play_2.10.jar:2.1.2]
at play.core.server.NettyServer.mainDev(NettyServer.scala) ~[play_2.10.jar:2.1.2]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_71]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_71]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_71]
at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_71]
at sbt.PlayCommands$$anonfun$$anonfun.apply(PlayCommands.scala:575) ~[na:na]
at sbt.PlayCommands$$anonfun$$anonfun.apply(PlayCommands.scala:507) ~[na:na]
at scala.Either$RightProjection.map(Either.scala:533) ~[na:na]
at sbt.PlayCommands$$anonfun.apply(PlayCommands.scala:507) ~[na:na]
at sbt.PlayCommands$$anonfun.apply(PlayCommands.scala:487) ~[na:na]
at sbt.Command$$anonfun$sbt$Command$$apply1$$anonfun$apply.apply(Command.scala:72) ~[na:na]
at sbt.Command$.process(Command.scala:90) ~[na:na]
at sbt.MainLoop$$anonfun$next$$anonfun$apply.apply(MainLoop.scala:71) ~[na:na]
at sbt.MainLoop$$anonfun$next$$anonfun$apply.apply(MainLoop.scala:71) ~[na:na]
at sbt.State$$anon.process(State.scala:170) ~[na:na]
at sbt.MainLoop$$anonfun$next.apply(MainLoop.scala:71) ~[na:na]
at sbt.MainLoop$$anonfun$next.apply(MainLoop.scala:71) ~[na:na]
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) ~[na:na]
at sbt.MainLoop$.next(MainLoop.scala:71) ~[na:na]
at sbt.MainLoop$.run(MainLoop.scala:64) ~[na:na]
at sbt.MainLoop$$anonfun$runWithNewLog.apply(MainLoop.scala:53) ~[na:na]
at sbt.MainLoop$$anonfun$runWithNewLog.apply(MainLoop.scala:50) ~[na:na]
at sbt.Using.apply(Using.scala:25) ~[na:na]
at sbt.MainLoop$.runWithNewLog(MainLoop.scala:50) ~[na:na]
at sbt.MainLoop$.runAndClearLast(MainLoop.scala:33) ~[na:na]
at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:17) ~[na:na]
at sbt.MainLoop$.runLogged(MainLoop.scala:13) ~[na:na]
at sbt.xMain.run(Main.scala:26) ~[na:na]
at xsbt.boot.Launch$.run(Launch.scala:55) ~[na:na]
at xsbt.boot.Launch$$anonfun$explicit.apply(Launch.scala:45) ~[na:na]
at xsbt.boot.Launch$.launch(Launch.scala:69) ~[na:na]
at xsbt.boot.Launch$.apply(Launch.scala:16) ~[na:na]
at xsbt.boot.Boot$.runImpl(Boot.scala:31) ~[na:na]
at xsbt.boot.Boot$.main(Boot.scala:20) ~[na:na]
at xsbt.boot.Boot.main(Boot.scala) ~[na:na]
更新 #2:忘了说我正在使用 play 2.1.2
当您使用 play run
时,您的应用程序将以开发模式启动。在这种模式下,应用程序本身只有在收到第一个请求时才会真正启动。有时会发生这种情况,即使在服务器启动并准备好接受请求后,Play 也会检测到某些内容已更改并重新编译某些内容,从而使浏览器 "waiting"(我在每个 Play [=20] 中都注意到了这种行为=] 版本,但我不确定它是否与我的设置或错误有关)。这可能是您遇到延迟的原因。
避免这种情况的最佳方法是确保一切准备就绪,使用 play copile
和 play start
,或使用 play dist
,这将为您提供准备好应用程序的文件用于生产。有关详细信息,请参阅 here。
这是
不确定这是播放问题还是网络服务器的正常结果。我正在使用 play 2.1.2
我有一个网站,如果一切正常,它会立即 returns http 代码 200。 如果站点出于某种原因有问题,它不会立即 return 500 内部服务器错误。似乎需要 5 分钟才能最终 return 500 错误。
这是在 运行 我们的网站上使用播放框架时出现的问题,还是我应该检查其他问题以了解为什么会发生这种情况?我还使用来自 python 的 httplib 来检查网站。
我不知道要添加哪些其他详细信息来帮助调试,但希望简单的答案是播放框架正在对站点执行某些操作并且在超时(5 分钟)之前不会回复 500 代码已经过去了。
更新:附件是我用我的脚本点击它时来自服务器的消息。这是在测试服务器上,所以我预计它会失败。我执行 ulimit -n 275
导致服务器出现文件不足错误。
这是我从我的脚本中得到的错误,如果我 运行 它在导致问题的 5 分钟内:
got some exception Traceback (most recent call last): File "monitorAlive.py", line 27, in <module> main() File "monitorAlive.py", line 24, in main get_status_code(host) File "monitorAlive.py", line 16, in get_status_code if resp == 200: UnboundLocalError: local variable 'resp' referenced before assignment
但是,如果我等待 5 分钟以上,然后我 运行 我的脚本来检查站点,这就是我得到的:
didn't get a 200 http response. something wrong this is the code we got: 500
这些是我导致文件不足错误时的日志消息。我的脚本不会导致网络服务器记录任何其他消息,但我 运行 我的脚本故意导致 site/server 出现问题,所以这些消息来自我,导致文件不足错误。
! @70jo4chan - Internal server error, for (GET) [/] ->
play.api.PlayException: Not initialized[?]
at play.core.ReloadableApplication.<init>(ApplicationProvider.scala:92) ~[play_2.10.jar:2.1.2]
at play.core.server.NettyServer$$anonfun$mainDev.apply(NettyServer.scala:273) ~[play_2.10.jar:2.1.2]
at play.core.server.NettyServer$$anonfun$mainDev.apply(NettyServer.scala:272) ~[play_2.10.jar:2.1.2]
at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10.jar:2.1.2]
at play.core.server.NettyServer$.mainDev(NettyServer.scala:271) ~[play_2.10.jar:2.1.2]
at play.core.server.NettyServer.mainDev(NettyServer.scala) ~[play_2.10.jar:2.1.2]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_71]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_71]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_71]
at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_71]
at sbt.PlayCommands$$anonfun$$anonfun.apply(PlayCommands.scala:575) ~[na:na]
at sbt.PlayCommands$$anonfun$$anonfun.apply(PlayCommands.scala:507) ~[na:na]
at scala.Either$RightProjection.map(Either.scala:533) ~[na:na]
at sbt.PlayCommands$$anonfun.apply(PlayCommands.scala:507) ~[na:na]
at sbt.PlayCommands$$anonfun.apply(PlayCommands.scala:487) ~[na:na]
at sbt.Command$$anonfun$sbt$Command$$apply1$$anonfun$apply.apply(Command.scala:72) ~[na:na]
at sbt.Command$.process(Command.scala:90) ~[na:na]
at sbt.MainLoop$$anonfun$next$$anonfun$apply.apply(MainLoop.scala:71) ~[na:na]
at sbt.MainLoop$$anonfun$next$$anonfun$apply.apply(MainLoop.scala:71) ~[na:na]
at sbt.State$$anon.process(State.scala:170) ~[na:na]
at sbt.MainLoop$$anonfun$next.apply(MainLoop.scala:71) ~[na:na]
at sbt.MainLoop$$anonfun$next.apply(MainLoop.scala:71) ~[na:na]
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) ~[na:na]
at sbt.MainLoop$.next(MainLoop.scala:71) ~[na:na]
at sbt.MainLoop$.run(MainLoop.scala:64) ~[na:na]
at sbt.MainLoop$$anonfun$runWithNewLog.apply(MainLoop.scala:53) ~[na:na]
at sbt.MainLoop$$anonfun$runWithNewLog.apply(MainLoop.scala:50) ~[na:na]
at sbt.Using.apply(Using.scala:25) ~[na:na]
at sbt.MainLoop$.runWithNewLog(MainLoop.scala:50) ~[na:na]
at sbt.MainLoop$.runAndClearLast(MainLoop.scala:33) ~[na:na]
at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:17) ~[na:na]
at sbt.MainLoop$.runLogged(MainLoop.scala:13) ~[na:na]
at sbt.xMain.run(Main.scala:26) ~[na:na]
at xsbt.boot.Launch$.run(Launch.scala:55) ~[na:na]
at xsbt.boot.Launch$$anonfun$explicit.apply(Launch.scala:45) ~[na:na]
at xsbt.boot.Launch$.launch(Launch.scala:69) ~[na:na]
at xsbt.boot.Launch$.apply(Launch.scala:16) ~[na:na]
at xsbt.boot.Boot$.runImpl(Boot.scala:31) ~[na:na]
at xsbt.boot.Boot$.main(Boot.scala:20) ~[na:na]
at xsbt.boot.Boot.main(Boot.scala) ~[na:na]
更新 #2:忘了说我正在使用 play 2.1.2
当您使用 play run
时,您的应用程序将以开发模式启动。在这种模式下,应用程序本身只有在收到第一个请求时才会真正启动。有时会发生这种情况,即使在服务器启动并准备好接受请求后,Play 也会检测到某些内容已更改并重新编译某些内容,从而使浏览器 "waiting"(我在每个 Play [=20] 中都注意到了这种行为=] 版本,但我不确定它是否与我的设置或错误有关)。这可能是您遇到延迟的原因。
避免这种情况的最佳方法是确保一切准备就绪,使用 play copile
和 play start
,或使用 play dist
,这将为您提供准备好应用程序的文件用于生产。有关详细信息,请参阅 here。