如何诊断 Oracle Apex 上频繁出现的“500 内部服务器错误”

如何诊断 Oracle Apex 上频繁出现的“500 内部服务器错误”

我在 Amazon EC2 实例上的 OEL 5 上运行了一个 Oracle 10g XE 数据库。我在该数据库上运行了一个用 Oracle Application Express 4.0.1 编写的公共网站(实际上是 2 个网站)。

一年中的大部分时间,该网站主要供人们查看信息。因此,它运行良好 - 没有错误,活动不多。每年这个时候(3 月至 4 月),当我们开始接受运动队申请时,我开始看到频繁的错误,几乎总是在提交屏幕时(例如,创建或更新记录的屏幕)。

我需要帮助来找出错误的原因。

实际的错误消息是 Apache 错误“上游服务器的响应无效”,这是由于我在 Apex 前面运行了 Apache(端口 80)——它将 /apex/ 上的请求代理传递到 Apex(端口 8080)。当我通过端口 8080 直接访问 Apex 时,我得到的是500 Internal Server Error。Apache 日志显示 Apache 也得到了这个。返回错误页面总是需要 3-5 秒。

有时(比如现在,当我尝试重现它时)它根本不会发生。其他时候(也许当有几个人在上面时?)需要 3-4 次才能接受更新。当它发生时,它发生的频率非常高 - 即可能只有十分之一的请求会在第一次尝试时成功。

我在许多不同的应用程序中都看到过这种情况,Apex 开发/管理应用程序本身也出现过这种情况。这个问题并不局限于任何一组页面,当页面应该插入记录、更新记录、调用过程,甚至只是导航到另一个页面时(尽管最后一种情况很少见),我也看到过这种情况。

警报日志中没有添加任何内容。我以为这可能是空间问题,但所有表空间似乎都有足够的可用空间。我尝试重新启动 Apache 并重新启动数据库,但没有任何变化。我已经没有办法“尝试”了,如果可能的话,我想一劳永逸地找出问题的原因。

答案1

我还不知道这是否是答案,但是 - 在最近亚马逊美国东部地区发生中断期间,我注意到ORA-00018 maximum number of sessions exceeded在尝试连接数据库时出现了问题。

从那时起,我增加了进程数(从而增加了会话数)。自中断以来,我注意到错误没有再发生。

注意:下次我们遇到一系列活动时,我会减少这个参数,看看问题是否会再次出现 - 然后我就会更好地知道这是否是解决方案。

答案2

关于 Oracle XE,需要记住的一件重要事情是,它对 RAM 使用量、用户数据空间使用量和 CPU 使用量实施了严格的限制。因此,任何尝试为多个请求提供服务的应用程序都将看到超时,除非专门编码来处理这些等待。这也许可以解释为什么您看到它“挂起”而没有在警报日志中收到任何消息:没有问题,系统只是仍在处理先前的任务。

相关内容