标签: java

使用 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:Tomcat 提供静态文件的速度很慢?

我正在 Windows 2008 平台上运行 Apache Tomcat (5.5) 的一个实例。我想我看到了一个与并发文件访问/锁定相关的问题。

当并发 HTTP 线程的数量增加到超过默认设置 (150) 时,我看到(使用站点监控工具)在提供某些静态内容(.js .gif .png 等)时“不自然”延迟的数量越来越多。我的意思是,服务器在开始发送之前需要 20 秒以上,或者需要 30 秒来提供小 (2KiB) 文件。

当 Tomcat 繁忙(服务超过 300 个线程)时,CPU 使用率平均约为 50-60%,磁盘使用率约为 10-30mbps。

是否有任何工具可以用于 Java 来确定是否是这种情况?Tomcat APR / Apache Native Library 是否有可能解决这个问题?

或者,还有什么我应该研究的吗?

网站分析工具截图: 在此处输入图片说明

tomcat java

5
推荐指数
1
解决办法
8537
查看次数

在 GNU/Linux 上自动更新较新的 JRE

如何设置 GNU/Linux 机器以自动更新较新版本的 Java 运行时环境 (JRE)?困难在于想要使用较新版本的 Java(目前为 Java 7)并且还需要合理地更新错误修复,尤其是安全更新,而无需过多的手动工作。

您可以依赖 O/S 发行版,但它们自然是保守的,因此仅提供旧 Java 版本的错误修复版本。RedHat 6 上没有 Java 7。

您可以从 Oracle 网站手动下载 JRE,并将您的JAVA_HOME环境变量设置为指向它。但是,当您希望更新企业中的多台机器时,这是不切实际的。

例如,是否有一种实用的方法可以在 RedHat 6 上使用 Java 7 并在 Oracle 发布错误修复时自动(或半自动)更新 Java 7 JRE?

linux java automatic-updates

5
推荐指数
1
解决办法
1490
查看次数

Linux 大页面使用统计

我已将 Huge Pages 配置为与 Java 一起使用,尽管我对 /proc/meminfo 中的记帐有疑问,但它似乎运行良好。为了显示

# grep HugePages /proc/meminfo 
AnonHugePages:    274432 kB
HugePages_Total:    1008
HugePages_Free:      596
HugePages_Rsvd:      594
HugePages_Surp:        0
Run Code Online (Sandbox Code Playgroud)

我的问题涉及“免费”和“Rsvd”数字 - 为什么它们加起来不等于 1008 的“总数”?它们实际上加起来是 1190。我在这里不明白什么?

linux memory java

5
推荐指数
1
解决办法
6328
查看次数

从静态 web 目录创建 tomcat war 文件

我创建了一个简单的 Web 应用程序,它由一个带有 html、css、js 的目录组成。没有服务器代码。出于复杂的原因,我的管理员坚持将其转换为.war文件,以便在tomcat上轻松部署。同样,该应用程序根本不包含任何 Java 代码。我没有用 ant 或 eclipse 创建它。

我尝试创建一个存档:

jar cvf mywarfile.war *
Run Code Online (Sandbox Code Playgroud)

这确实创建了一个战争文件。但是,当我在 tomcat 上部署此战争时,它似乎不起作用。Tomcat 会自动将 war 文件解压缩到一个目录中,但它不会通过 Web 服务器变为可用。我想这与我的战争不包含目录WEB-INF和META-INF.

有没有一种简单的方法可以将静态客户端 Web 应用程序转换为可部署的战争文件?

tomcat java web-server jsp

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

停止Tomcat后SSH无响应,ksoftirqd CPU使用率高

我有一个奇怪的问题。每次我停止 Tomcat 时,SSH 都会变得很慢,几乎完全没有响应。SSH 接受任何命令需要一分钟甚至更长时间。当我终于再次启动 Tomcat 时,一切都恢复正常。

这是在非常繁忙的服务器上发生的。问题是由于应用程序升级,我需要经常停止Tomcat。升级通常需要几秒钟,但在这里需要将近 10 分钟,因此我们遇到了不必要的停机时间。

我看到的一件事是,当我停止 Tomcat 时top,会ksoftirqd/X以 100% 的 CPU显示很多进程。这可能是问题吗?

内核版本是: 2.6.18-308.11.1.el5

红帽版本是: Red Hat Enterprise Linux Server release 5.9 (Tikanga)

知道为什么会这样吗?

linux ssh redhat tomcat java

5
推荐指数
1
解决办法
604
查看次数

以 root 身份启动 tomcat 的权限被拒绝

我刚开始使用 CentOS。

我安装Java

yum install java-1.7.0-openjdk-devel
Run Code Online (Sandbox Code Playgroud)

添加了一个用户:

$useradd supersite
Run Code Online (Sandbox Code Playgroud)

下载的tomcat:

$wget http://apache.mirror.anlx.net/tomcat/tomcat-7/v7.0.42/bin/apache-tomcat-7.0.42.zip
$unzip apache-tomcat-7.0.42.zip -d tomcat7
Run Code Online (Sandbox Code Playgroud)

创建的服务配置:

$ cd /etc/init.d
$ edit tomcat7-supersite
Run Code Online (Sandbox Code Playgroud)

我从这里复制了文件。

但是,当我尝试以 root 用户身份运行时(我看到我是 root@myip)

service tomcat7-supersite start
Run Code Online (Sandbox Code Playgroud)

我得到:

env: /etc/init.d/tomcat7-supersite: Permission denied
Run Code Online (Sandbox Code Playgroud)

为什么?

linux tomcat java centos yum

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

通过 AD Enterprise CA 的 Java 部署规则集

我的目标是在我的组织中建立一个 Java 部署规则集,但是当我们有一个通过 Active Directory 运行的工作 CA 时,我不想向第三方证书颁发机构支付代码签名证书。我遵循了我认为正确的程序来完成这项工作,但是当我最终运行任何 Java 小程序时,我收到以下错误:

无法验证自签名部署规则集 jar

我遵循的步骤是:

  1. 导出我们的根 CA 证书
  2. 将根证书导入 JRE 安装路径中的 cacerts
  3. 将根证书导入个人密钥库
  4. 使用 keytool 为具有个人密钥库的新证书生成 CSR
  5. 使用 certreq 向企业 CA 提交 CSR,使用“代码签名”模板
  6. 将该证书导入个人密钥库
  7. 创建了一个非常基本的部署规则集并将其编译成一个 jar
  8. 使用步骤 6 中个人密钥库中的证书对 jar 进行签名
  9. 将签名的 jar 复制到 \Windows\Sun\Java\Deployment\

上述步骤均已正确完成 - 与无效证书链等无关。我可以在 Java 控制面板中看到根 CA 证书,当我单击控制面板中的部署规则集链接并查看其证书时,我看到了第 6 步中的证书及其父 CA,两者都有未来的到期日期和据我所知的正确信息。但是我在运行任何小程序时仍然收到验证错误

那么 - 是否根本不可能做到这一点,我们必须支付证书费用?或者我(希望)做错了什么?如果有人有任何见解,将不胜感激,谢谢!

certificate java ad-certificate-services

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

Amazon 上的负载均衡器没有为 Cookie 设置安全标志

我们有一个在 Amazon 上运行的基于 Java 的应用程序,并且已经配置了我们的 Amazon ELB 以成功连接到它们。但是,我们看到 Cookie 标志未设置为安全。

Name    Value       Domain     Path    Expires     Secure

AWSELB  lkajsldf    test.com   /       Session     No
Run Code Online (Sandbox Code Playgroud)

如何使 cookie 安全?

linux java amazon-elb

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

kill -9 进程不会消失并且端口仍然绑定

我们有一个在 Mac OS X 上运行的 Java 服务器应用程序。

有时这个应用程序变得没有响应,我们不得不使用kill -9. 然而,这个过程并没有消失;它似乎仍然是ps,其名称周围带有括号,并且 STAT 列中有一个问号:

$ ps u -p 776
USER       PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
camadmin   776   0.0  0.0        0      0   ??  ?E    5:12PM   0:00.00 (java)
Run Code Online (Sandbox Code Playgroud)

更重要的是,服务器正在使用的端口仍然是绑定的:

$ netstat -na | grep 9902
tcp4       0      0  *.9902      *.*                    LISTEN
Run Code Online (Sandbox Code Playgroud)

即使它不可见lsof:

$ sudo lsof -P -i tcp | grep 9902
$
Run Code Online (Sandbox Code Playgroud)

由于端口仍然绑定,我们无法重新启动服务器应用程序。没有重新启动机器,可以做些什么来释放端口并真正杀死这个进程?

java port mac-osx kill netstat

5
推荐指数
1
解决办法
3153
查看次数