![在同时也是 Tomcat JSP 应用服务器的服务器上对 Oracle 10g 进行性能优化?](https://linux22.com/image/598286/%E5%9C%A8%E5%90%8C%E6%97%B6%E4%B9%9F%E6%98%AF%20Tomcat%20JSP%20%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E5%AF%B9%20Oracle%2010g%20%E8%BF%9B%E8%A1%8C%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%EF%BC%9F.png)
我继承了一个简单的 RedHat 5 - 64 位平台。
它具有 RAID1 上的 SCSI 磁盘,以及 16GB RAM。双核 CPU。
Oracle 10g,版本 2。
这或许是一个仅用于运行 DB 的不错的平台,但是“AA 模式”集群(非常简单)中的同一台服务器也运行 Tomcat,并且有多个 Java servlet 在其上运行。
遗憾的是没有缓存平台等。我们只使用外部 CDN 进行一些 html 缓存。
我个人比较熟悉LAMPP平台上的Web环境(apache,php,mysql,postgresql)。
问题:由于服务器同时运行 Tomcat JSP/Java 和 Oracle 10g,没有缓存,因此我经常遇到服务器宕机的问题。很不幸,这种情况经常发生。
问题:在提高所有这些不同应用程序的性能方面我有哪些选择?
连接池?例如,在 Postgresql 世界中,我们有 PgBouncer,它确实很有帮助。Oracle 有类似的东西吗?或者是否有一个著名的基于 Java 的外部池,人们在生产环境中使用?(我不熟悉 Java)
有像 MySQL 和 Postgresql 世界中那样的“SQL 缓存”吗?
任何其他类型的应用程序缓存,如 PHP 世界中的“APC”或“eAccelarator”?
Java 世界中的“OSCache”东西(我在 Google 上找到的 JSP 东西:http://onjava.com/pub/a/onjava/2005/01/05/jspcache.html?page=2)
...
还有什么?
抱歉,这是一个菜鸟问题。我在谷歌上搜索了好几次,但问题是我不知道什么除了上述广泛的一般概念之外,谷歌搜索的内容也很有用。因此,如果没有完整的答案,我甚至会很感激基本的指示,我很乐意亲自尝试。
谢谢!
答案1
我相信 Tomcat 提供了几种连接池选项,尽管 StackOverflow 可能是讨论这些可能性的更好的地方。
其余部分:
Oracle瓶颈和性能调优是一个广泛而复杂的领域,J2EE应用程序、容器和缓存也是如此。
有许多商业和开源工具应该有用,其中一些在识别可能的问题和教育用户方面大有裨益。Quest Software 的 Spotlight on Oracle 就是这样一种商业工具。Quest 还提供了 Performasure,我发现它是低级应用程序诊断的绝佳解决方案。http://www.quest.com/
Oracle 为其数据库平台提供了丰富的免费文档http://docs.oracle.com和http://tahiti.oracle.com包括有关性能考虑和调整的书籍。
同样,IBM Red Series 包含免费书籍,涵盖从 Oracle、J2EE、Linux、存储到通用系统设计等任何方面相关的性能调整和瓶颈问题。http://www.redbooks.ibm.com/
虽然不是免费的,但《Oracle Database 10g Performance Tuning: Tips & Techniques》是一本很棒的入门书,如果您需要更好地了解 Oracle 数据库的基础知识,那么《Oracle Essentials: Oracle Database 10g》也是一本很棒的入门书。您可以在以下网址在线阅读这两本书http://www.safaribooks.com/我确实相信他们会提供免费试用。
一个好的开始,或者至少是任何好的开始,是弄清楚哪些系统资源紧张,谁在使用它们。CPU 负载高吗?如果是,是由等待 I/O 引起的吗?内存是如何使用的,内存不足是否会导致额外的 I/O?应用程序或数据库是否占用大量 CPU?数据库工作负载是否受 CPU 或 I/O 限制?不稳定是否与性能有关,或者系统上是否存在其他问题。回答几个基本问题至少应该能让你走上正轨。
答案2
您应该确保 Tomcat JRE 以服务器模式(而非客户端)运行。这应该在启动时显示,但并非总是显示。这应该与在 PHP 世界中使用 eAccellerator 的步骤相同 - Servlet 在加载时进行编译。
连接池显然是必要的。我认为没有池的应用程序不太可能。但最好检查一下。E
在 Web 应用程序中,我总是通过添加 HTTP-Header(Pragma cache、Expires)来强制缓存静态元素,从而获得巨大的改进。
如果您有能力改变编程,查看 SQL 计划(解释)总是有帮助的......它经常向我展示我缺少索引的地方。
当然还要实现常用元素的缓存......
另一个可以考虑的可能性是增加 Tomcat 的堆 (-Xmx....) - 如果 Tomcat 内存不足并开始垃圾收集,这可能会有所帮助。
“宕机”具体指什么?服务器变慢了或者崩溃了?