标签: java

java/tomcat/linux环境的部署监控工具

我是多年的开发人员,但没有大量的操作经验,所以如果这是一个新问题,请道歉。

在我的公司,我们运行一个用 Java 编写的 Web 服务,主要基于 Tomcat Web 服务器。我们有两个数据中心,每个数据中心大约有 10 台主机。主机有几种类型:Dababase、Tomcats、一些离线java进程、memcached服务器。所有主机都是 Linux CentOS

到目前为止,在发布新版本到生产环境时,我们一直在使用一组内部 shell 脚本来复制 jars/wars 并重新启动 tomcat。

公司变得越来越大,因此操作所有这些并从开发、QA、暂存和生产中获取代码变得越来越困难。一次典型的发布多次涉及人为错误,这会花费我们宝贵的正常运行时间。有时我们需要恢复到上次已知的好处,这至少不容易说......

我们正在寻找一个工具、一个框架、一个解决方案,可以提供以下内容:

  • 支持给定的技术列表(java、tomcat、linux 等)
  • 通过不同阶段(包括 QA 和生产)提供轻松部署
  • 提供配置管理。例如设置服务器属性(每个主机的连接 URL 是什么等)、server.xml 或上下文配置等
  • 监控。如果我们可以在同一个包中进行监控,那就太好了。如果没有,那么我们可以使用另一个工具来监控我们的服务器。
  • 最好是有大量文档的开源软件;)

有人可以分享他们的经验吗?推荐几个工具?

谢谢!

linux monitoring deployment java

6
推荐指数
1
解决办法
3946
查看次数

哪个 JVM 最适合 Tomcat?

我已经启动并运行了 Tomcat 6.0。我去调整内存大小并意识到我在 Sun JDK 1.6客户端JVM上运行它。我没有安装 Sun 服务器 JVM:

C:\>java -client -version
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Client VM (build 14.2-b01, mixed mode, sharing)

C:\>java -server -version
Error: no `server' JVM at `C:\appl\java\jre6u16\bin\server\jvm.dll'.
Run Code Online (Sandbox Code Playgroud)

澄清一下:我知道如何将 Tomcat 中的 JVM 从客户端切换到服务器。我只需要选择最合适的服务器 JVM。

我会注意到客户端和服务器 JVM 之间的巨大差异吗?如果我想要 Sun 服务器 JVM,我是否必须重新安装整个 JDK?是否有其他免费的服务器替代品适合运行 Tomcat?

tomcat java

6
推荐指数
1
解决办法
1万
查看次数

Ubuntu 上的 OpenJDK 与 Sun Java6

由于过去在某些发行版上默认提供 GCJ 内容而导致的(糟糕的)体验,我一直在传统上在服务器上安装官方 Sun Java 包。

在 Ubuntu 上这很容易,但现在 OpenJDK 是首选选项并且更容易安装......我想知道:有什么理由不使用它吗?据我所知,它是 Sun JDK 的开源版本。


仅供参考:Sun Java JDK 6u20(适用于 Ubuntu 10.04)可从Canonical Partner 存储库获得

ubuntu java sun

6
推荐指数
1
解决办法
3475
查看次数

使用 Java 使我的磁盘崩溃

我有一个必须做以下 3 件事的 Java 程序:

  1. 从网站下载文件。
  2. 通过 testA 和 testB 运行文件(均在 java 中)
  3. 删除文件并将测试结果保存在磁盘上。

这是为大约 1,000,000 个不同的站点完成的。这应该是一项相当简单的任务,因为我只是将其他程序的部分粘在一起:testA并且testB两者都已经分别针对数千万个不同的页面毫无问题地执行了,并且下载页面的例程也已经执行了大约一百万个页面几次,也从未出现任何问题。它们都在 Ubuntu 10.4 机器上执行。

但是,当一个接一个地执行这 3 个时,无论将文件写入哪个磁盘都会崩溃。我第一次在外部 USB HD 上运行它时,我必须手动断开连接并重新连接才能恢复运行(否则 Linux 将无法识别它)。下一次,在内部 HD 上,整个系统出现故障,我不得不手动重新启动它。写入 RAM 磁盘时也发生了同样的情况。

问题是我无法真正隔离问题。发生崩溃的时间太长(大约 50 小时左右,但它是随机的),因此测试花费的时间太长,并且没有系统日志指示故障发生的位置/方式。机器或 HD 只是停止响应。

除了崩溃,一切正常。文件正常创建和删除,线程不会死亡并正常执行,并且两个测试都正常工作。更改内存或线程数对锁定时间没有影响。我已经检查过 Sockets 或类似的东西没有被关闭,但我什至不知道如何开始测试,我不知道 Java 可能会导致系统崩溃。

编辑:挂断我的意思是,当我在外部 HD 上运行它时,Linux 无法识别 HD,当我在内部 HD 或 Ram 磁盘上运行它时,计算机不会响应任何 I/O无论如何,没有任何内容写入磁盘,没有记录 cactii 日志等。例如,无法使用 SSH 连接。

程序如何运行的示例:

List<String> pagesToDownload = getFromDataBase();
for(i=0;i<NumThreads;i++){
    launchTestThread();
}
Run Code Online (Sandbox Code Playgroud)

然后,在每个线程上:

String pageName = getNextPageToDownload();
File downloadedFile = downloadPage(pageName);
TestAResults testAResults …
Run Code Online (Sandbox Code Playgroud)

hard-drive java

6
推荐指数
2
解决办法
345
查看次数

配置 IP 地址而不是 localhost:8080 tomcat eg:192.260.0.2:8080

谁能建议我如何在 tomcat 中配置我的 localhost:8080 以连接到 IP 地址而不是 localhost,这样我就可以在工作场所的任何系统中访问我的本地主机...我正在使用 tomcat6 和 netbeans 6.9.1

tomcat java

6
推荐指数
1
解决办法
12万
查看次数

为什么有这么多进程在运行?

我使用 Ubuntu 8.04、Nginx、Passenger、Mysql、RVM 在 VPS 上托管了几个 Rails 应用程序,所以所有常见的嫌疑人。

在过去的日子里,这是我第一次真正必须调试问题并查看正在运行的进程。我可以使用passenger-status 和passenger-memory-stats 来解决这个问题,但是我对正在运行的进程数量感到很困惑,无法弄清楚。

看看这个截图,例如:http : //screencast.com/t/wUMrmy5iQPQi(取自 htop)

它显示了许多 Hudson 进程(Hudson 是我在那台机器上运行的 CI 服务器)。

我的问题是:

  • 为什么有 34 个?
  • 它们都是独立的进程吗?
  • 是否应该有 34 个或其中一些过时的孤立​​进程在重新启动时没有正确关闭,我应该杀死哪些进程?

linux ubuntu java process

6
推荐指数
1
解决办法
7071
查看次数

如何在基于 centos x64 linux 的系统上卸载 JDK

我尝试在我的 CentOS x64 Web 服务器中安装 JDK,看起来我已经做了一些事情:(...

现在,如何在 Centos x64 linux 中卸载 JDK 1.6.0_26?

问候,阿文德。

java centos uninstall centos5

6
推荐指数
1
解决办法
2万
查看次数

无法在 OpenVZ 上创建 Java VM

从 apt-get 安装东西时,我经常遇到与运行在 OpenVZ 中的 Ubuntu 服务器上的 Java 和证书相关的错误。我很确定这与 Java 分配内存的方式有关。我知道失败计数器privvmpages非常高,所以问题一定是 Java 达到了这个限制。

我已经读到服务器 VM 将预先分配大量内存来抢占性能问题,但客户端 VM 不会这样做,并且可能更适合我正在做的事情。我弄乱了 jvm.cfg 使系统转到客户端 VM,但收到一个错误,说它找不到客户端 VM。

我已经尝试用 -Xms 和 -Xmx 设置调用 Java 的脚本替换 Java 二进制文件,这解决了我从命令行调用基本内容时的问题,但在执行 apt-get 配置证书等操作时却没有解决。

我不知道接下来要尝试什么。我需要让它工作,但简单地增加privvmpages不是一个可用的选项。我在下面粘贴了实际错误。

Setting up ca-certificates-java (20100412) ...
creating /etc/ssl/certs/java/cacerts...
Could not create the Java virtual machine.
  error adding brasil.gov.br/brasil.gov.br.crt
  error adding cacert.org/cacert.org.crt
  error adding debconf.org/ca.crt
  error adding gouv.fr/cert_igca_dsa.crt
  error adding gouv.fr/cert_igca_rsa.crt
  error adding mozilla/ABAecom_=sub.__Am._Bankers_Assn.=_Root_CA.crt
  error adding mozilla/AOL_Time_Warner_Root_Certification_Authority_1.crt
  error adding mozilla/AOL_Time_Warner_Root_Certification_Authority_2.crt
  error adding mozilla/AddTrust_External_Root.crt
  error …
Run Code Online (Sandbox Code Playgroud)

ubuntu java openvz apt

6
推荐指数
1
解决办法
1764
查看次数

使用 ab 运行一些基准测试,tomcat 开始真的变慢了

我正在使用 apache bench 为在 tomcat 上运行的 java 应用程序运行一些基准测试。

说我运行一个测试,如:

ab -c 10 -n 10000 http://localhost:8080/hello/world
Run Code Online (Sandbox Code Playgroud)

它会运行得很好。如果我遵循它:

ab -c 50 -n 50000 http://localhost:8080/hello/world
Run Code Online (Sandbox Code Playgroud)

再次它会运行良好,但如果我再试一次,它可能会在 3500 个完成的请求后开始变慢。

我需要帮助来尝试调试此问题的根本原因。

我跑到了上面,我有一些未使用的内存,所以内存似乎不是问题。

tomcat6 进程确实达到了 70-80 甚至 107%。

似乎重新启动 tomcat 可以解决问题,但有时需要重新启动服务器。

这是在分配了 200 个线程的默认 tomcat 安装上。

Tomcat 日志为空。

更新

因此,我将 tcp_tw_recycle/reuse 都更改为 1,并且现在运行 netstat 显示的计数非常低。

在更改 tcp_tw_recycle/reuse 之前,我注意到事情变慢并运行 netstat 并且我有 32400 个 tcp TIME_WAIT 连接。

所以现在运行基准测试的更新,使用 -k 开关,我看到了更多的吞吐量。但是,在某些时候事情又开始变慢了,但是现在重新启动 tomcat 使事情恢复正常。之前,即使我重新启动tomcat,运行ab 的响应时间也会非常非常慢。 现在更改 tcp_tw_recycle/reuse 后,重新启动 tomcat 使事情恢复正常。运行 top 显示只有大约 20% 的 cpu 的 tomcat,所以现在看来​​问题出在 tomcat 上,但我怎么知道是什么?

ubuntu tomcat java

6
推荐指数
1
解决办法
1628
查看次数

清除 Java 证书缓存(强制重新加载证书)

这里有一个简单的问题。

一个应用程序在尝试访问证书过期的网站时给了我这个异常: java.security.cert.CertificateExpiredException

所以,我更新了网站机器的证书并重新启动了它。当我尝试从 Firefox 或 Chrome 访问它时,它会加载新证书(它的到期日期设置在 2040 年附近)。

问题是,Java 应用程序似乎没有更新此证书,它似乎卡在某种内部缓存中。我已经尝试将它添加到keystore应用程序属性中并设置选项,例如-Dcom.sun.net.ssl.checkRevocation=false. 不管我做什么,它总是给我一个java.security.cert.CertificateExpiredException

有任何想法吗?

ssl certificate java cache

6
推荐指数
1
解决办法
2万
查看次数