我在Amazon EC2实例的OEL 5上运行Oracle 10g XE数据库。 在这上面我运行了一个用Oracle Application Express 4.0.1编写的公共网站(实际上是2个网站)。
大部分时间,这个网站主要是用来查看信息的。 因此,它工作正常 – 没有错误,没有太多的活动。 在每年的这个时候(3月到4月),当我们开始从一个运动队的人员那里申请的时候,我开始看到经常出现的错误,几乎总是在提交一个屏幕(比如创build或者更新一个logging的时候)。
我需要帮助来找出错误的原因。
实际的错误信息是一个Apache错误“来自上游服务器的无效响应”,这是由于我在Apex前面运行了Apache(端口80) – ProxyPassses / apex /上的请求到Apex(端口8080) 。 当我通过端口8080直接访问Apex时,我得到500 Internal Server Error 。 Apache日志显示了Apache正在获得的东西。 在错误页面返回之前,它总是需要3-5秒。
有时(像现在,当我试图重现它),它根本不会发生。 其他时候(也许有几个人在上面呢?)在更新被接受之前,需要3-4个时间。 发生时,会非常频繁地发生 – 也就是说,在第一次尝试中,只有十分之一的请求会成功。
我已经看到它出现在许多不同的应用程序,以及在Apex开发/pipe理应用程序本身。 问题不是孤立的任何页面,我已经看到,当一个页面应该插入一个logging,更新logging,调用一个过程,甚至只是导航到另一个页面(尽pipe最后一个是罕见的)。
没有东西被添加到警报日志。 我认为这可能是空间问题,但所有的表空间似乎都有足够的空间。 我试过重新启动Apache并重新启动数据库,没有任何改变。 我已经用尽了所有的东西,只是“尝试”,我想尽可能一劳永逸地解决问题的原因。
我不知道这是否是答案,但是 – 在美国亚马逊河东岸最近的停机期间,我发现在尝试连接数据库时, ORA-00018 maximum number of sessions exceeded了。
我已经提高了进程的数量(从而增加了会话的数量)。 自停电以来,我注意到错误没有再发生。
注意:下一次我们得到一系列的活动,我会减less这个参数,看看问题是否重新发生 – 那么我会有一个更好的主意,如果这是解决scheme。
Oracle XE要记住的一件重要的事情是,它对内存使用,用户数据空间使用情况和CPU使用情况施加了严格的限制。 因此,任何试图处理多个请求的应用程序都将看到超时,除非专门编码来处理这些等待。 这也许可以解释为什么你看到它“挂起”而没有在警报日志中得到消息:没有什么是错的,系统只是简单地处理以前的任务。