我有一个后台进程,可以更新 Tomcat 用于其 SSL 凭据的密钥库。我希望能够让 Tomcat 自动重新加载它,而无需手动重启。
是否可以在不重新启动的情况下让 Tomcat 重新加载它,或者是否可以通过编程方式来代替它?
我们在 EC2 上托管的 Tomcat 前面有一个 apache 网络服务器,实例类型特大,内存为 34GB。
我们的应用程序处理大量外部网络服务,我们有一个非常糟糕的外部网络服务,在高峰时段需要将近 300 秒来响应请求。
在高峰时段,服务器只有大约 300 个 httpd 进程而窒息。ps -ef | grep httpd | wc -l =300
我在谷歌上搜索并发现了许多建议,但似乎没有任何效果..以下是我所做的一些配置,这些配置直接取自在线资源。
我在 apache 和 tomcat 中都增加了最大连接数和最大客户端数的限制。这是配置详细信息:
//阿帕奇
<IfModule prefork.c>
StartServers 100
MinSpareServers 10
MaxSpareServers 10
ServerLimit 50000
MaxClients 50000
MaxRequestsPerChild 2000
</IfModule>
Run Code Online (Sandbox Code Playgroud)
//tomcat
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="600000"
redirectPort="8443"
enableLookups="false" maxThreads="1500"
compressableMimeType="text/html,text/xml,text/plain,text/css,application/x-javascript,text/vnd.wap.wml,text/vnd.wap.wmlscript,application/xhtml+xml,application/xml-dtd,application/xslt+xml"
compression="on"/>
Run Code Online (Sandbox Code Playgroud)
//sysctl.conf
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
fs.file-max = 5049800
vm.min_free_kbytes = 204800
vm.page-cluster = 20
vm.swappiness = 90
net.ipv4.tcp_rfc1337=1
net.ipv4.tcp_max_orphans = 65536
net.ipv4.ip_local_port_range = 5000 65000
net.core.somaxconn …Run Code Online (Sandbox Code Playgroud) 我们当前的堆栈是 Apache + Tomcat + MySQL,使用ProxyPassAJP 将请求从 Apache 发送到 Tomcat。我们还在相同的站点上为 Wordpress 运行 PHP,因此需要工作.htaccess文件。为了解决一个烦人的问题(请参阅此堆栈溢出页面),我们正在考虑替代堆栈。请注意,我们通常非常喜欢 apache,但这个问题是个障碍:如果我们不能修复它,我们就不能使用 Apache。
替代方案包括:
在我看来,解决方案分为两个阵营:纯 Java 阵营,如 Glassfish;或者分裂阵营,比如我们现在的Apache + Tomcat。我们喜欢纯 Java 解决方案的想法,因为更少的活动部件意味着更少的错误;但是它们中的任何一个都支持 PHP、.htaccess文件等吗?
从理论上讲,我们可以用另一种方式进行拆分——有一个简单的前端,只在需要这些功能的那些位上代理 Apache——但实际上这将是 80% 的请求。
人们建议什么选择?
我主要是一名 Java 开发人员,我向您提出了一个跨越开发人员和系统管理员之间鸿沟的问题。
多年前,当将 Tomcat 作为应用程序服务器运行是一件新鲜事时,习惯上将 Apache 置于前端。据我了解,这样做是因为:
Java 不再被认为是缓慢的,我怀疑将 Apache 添加到组合中是否真的有助于加快速度。
至于端口问题,如今可能有更简单的方法将应用服务器连接到端口 80/443。
所以我的问题是——这些天用 Apache 前端 Java Webapps 真的有什么好处吗?如果是这样,Apache 仍然是要走的路吗?我应该看看 Nginx 吗?如果这很重要,我使用的是 Glassfish 而不是 Tomcat。
通过主管进行控制时,有没有办法“优雅地”关闭tomcat?
我的理解是 Tomcat 的 shutdown.sh 脚本在关闭端口上与 tomcat 对话以启动正常关闭。主管似乎没有办法指定关闭“命令”,只能使用信号。
有没有人成功地将主管与 tomcat 一起使用?
此外,由于 tomcat 的 startup.sh 脚本启动了 java 进程,我一直将生成的 java 命令直接复制到 supervisor 中,但是由于所有环境设置,这不如使用 startup.sh 脚本好。有没有办法让主管使用 startup.sh 脚本但仍然跟踪生成的子 Java 进程?
我对 AWS 服务很陌生。我正在尝试使用 AWS 云格式并创建了一个模板。该模板没有错误,我可以使用它创建机器。
但是我在模板中添加了一些配置,以便在启动期间安装 tomcat、git 和其他东西。但这不会发生在我身上。
这是我用于安装 tomcat 的部分代码:
"Resources": {
"Tomcat": {
"Type": "AWS::EC2::Instance",
"Metadata": {
"AWS::CloudFormation::Init": {
"config": {
"packages": {
"apt": {
"tomcat6": [],
"git": [],
}
}
}
}
},
Run Code Online (Sandbox Code Playgroud)
但是当我登录机器时既tomcat没有git也没有安装!
提前致谢。
最近我将我的 tomcat 服务器从 6.x 版本升级到了最新的 7.x 版本。
我想出了一点麻烦,希望得到帮助。
我有一个应用程序调用 MyApp
在 tomcat6 上,当我访问http://www.example.com/MyApp/page/ 时, 我通常会得到想要的结果。
现在,在 tomcat7 上,访问相同的确切 url(带有尾部斜杠)我收到错误:“资源不可用”,因为 tomcat 认为 /MyApp/page/ 是一个完整的 webapp 名称而不是请求名称MyApp webapp 下的页面。
我需要在我的 url 末尾加上斜杠,否则我会收到错误:“HTTP 状态 405 - 不支持请求方法‘GET’”,这没关系,因为我真的不允许“页面”请求的 GET 方法.
如果有人知道如何告诉 tomcat 在现有 webapp 路径之后的斜杠不应该假设将它重定向到新的 webapp 调用整个“字符串”并像在 tomcat6 上那样处理请求,那就太好了!
我正在管理几个 tomcat 实例(大约 30-35 个)并寻找一些控制台来集中日志。我之前尝试过 php-syslog-ng(没有使用 tomcat),发现它很有用。我希望这些软件具有以下一些功能:
- 根据异常的严重性高亮语法。- 堆栈跟踪和嵌套异常的树视图。
加分点:
- 当某些模式匹配时报警。
我们配置了IIS 7网络服务器,并希望在同一台机器上使用Tomcat为TeamCity安装创建反向代理。
IIS 服务器站点是https://somesite,我希望 TeamCity 显示为https://somesite/teamcity重定向到http://localhost:portnumber.
我已经安装了IIS URL 重写扩展和应用程序请求路由来尝试设置反向代理,但无法使其工作。
我找到的最接近的答案是一个旧的 StackOverflow 问题:https ://stackoverflow.com/questions/331755/how-do-i-setup-teamcity-for-public-access-over-https
不幸的是没有任何工作例子。
我已经搜索了很多,但似乎找不到相关的例子。
任何帮助表示赞赏!
我设置了 apache 来代理 tomcat,但是当我定位页面时出现以下错误。我有时会得到一个空白页或 503:
[错误]
[Mon Dec 03 04:58:16 2012] [error] proxy: ap_get_scoreboard_lb(2) failed in child 29611 for worker proxy:reverse
[Mon Dec 03 04:58:16 2012] [error] proxy: ap_get_scoreboard_lb(1) failed in child 29611 for worker https://localhost:8443/
[Mon Dec 03 04:58:16 2012] [error] proxy: ap_get_scoreboard_lb(0) failed in child 29611 for worker http://localhost:8080/
Run Code Online (Sandbox Code Playgroud)
我在 vm 上配置了两个 vhost,如下所示:
[http 主机]
<VirtualHost *:80>
ServerName www.mysite.net
ServerAlias mysite.net
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/ retry=0
ProxyPassReverse …Run Code Online (Sandbox Code Playgroud)