我有一台运行 Ubuntu 11.04 (Natty)(64 位)的新服务器。我从安装openjdk和开始tomcat6。当 Tomcat 服务器启动时,它立即使用480+ MB的内存。这似乎不成比例,我想知道是否有人有办法让 Tomcat 使用200-300 MB(或更少)内存。
我用memtop看到了这个:(注意:我删除了除了大条目之外的所有条目。499MB 条目是 Tomcat)
user@xyz:~# python memtop-0.9.py
PID | private/writ. mem |command
| current | previous |(truncated)
19776 | 499.3 MB | +++++ |/usr/lib/jvm/java-6-openjdk/bin/java-Djava.util.logging.config.file=/var/lib/tomcat6/conf/logging.properties-Djava.awt.headless=true-Xm
18082 | 148.6 MB | +++++ |/usr/sbin/mysqld
1385 | 3.6 MB | ++ |pythonmemtop-0.9.py
RAM usage: ============================================== 69.3 %
Run Code Online (Sandbox Code Playgroud)
此外,您可以看到我安装了哪些 JDK 和 Tomcat 包:
user@xyz:~# dpkg --get-selections | grep jdk
default-jdk install
openjdk-6-jdk install
openjdk-6-jre install …Run Code Online (Sandbox Code Playgroud) 一点背景:我有一个 webapp,它同时包含 Servlet/JSP 动态内容和静态文件。页面始终是动态的,每个页面都有大约 10 个静态资源。一切都通过 HTTP 提供服务(Tomcat Native 似乎对 HTTPS 有更多帮助)。我计划在 Tomcat 7 和 Java 6 下托管这个 webapp。
我正在争论是否使用 Tomcat Native。是否值得麻烦/冒险,或者这些天,热点是否足够快,我最好不要打扰 Tomcat Native?归根结底,我可能会对两者进行基准测试,但我也在寻找人们的经验。
我有一个网站,主要由静态 html 页面组成,偶尔会有 ajax 请求。该站点在 Apache 上运行,ajax 由 Tomcat 处理。
如果 Tomcat 响应变慢(java 无法连接到数据库服务器,或者只是因为任何原因需要很长时间来处理请求) - 它会使整个站点瘫痪:所有静态 html 页面都需要很长时间才能加载(相同带有图像、css、js)。
现在,如果我只是手动停止 Tomcat,一切仍然正常 - 该站点快速且响应迅速,只是 ajax 请求不起作用。
如何使响应缓慢的 Tomcat 不使用所有 Apache 资源,以便无论 Tomcat 发生什么情况,静态页面都可以始终工作?在我的情况下,响应式 html 页面比不使用 ajax 重要得多。
httpd.conf :
Timeout 120
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule prefork.c>
StartServers 16
MinSpareServers 10
MaxSpareServers 40
ServerLimit 512
MaxClients 512
MaxRequestsPerChild 4000
</IfModule>
Run Code Online (Sandbox Code Playgroud)
worker.properties
worker.worker1.port=8888
worker.worker1.reply_timeout=120000
worker.worker1.socket_timeout=150000
Run Code Online (Sandbox Code Playgroud)
服务器.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8081" />
<Connector port="8888" scheme="http" protocol="AJP/1.3" redirectPort="8889" minSpareThreads="100" maxThreads="400" connectionTimeout="20000" acceptorThreadCount="2"/>
Run Code Online (Sandbox Code Playgroud) 我已经使用 Server 2008 和 IIS 7 设置了 Tomcat 服务器。
如何判断 JAVA_OPTS 环境变量是否正在被实际使用?
我之前听说我必须编辑 service.bat 文件才能使用 JAVA_OPTS 环境变量,但是我怎么知道它是否成功?
我一直无法找出是否有办法在日志或其他更定量的东西中查看它。我能想到的尝试测试它的唯一方法是编辑变量并尝试判断性能是否存在差异。我将 JAVA_OPTS 设置为以下内容:
-server -Xmx1k -Xms1k-Xmn1k -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:PermSize=1k -XX:MaxPermSize=1k
Run Code Online (Sandbox Code Playgroud)
另外,我发现文档说要将 service.bat 中的以下行更改为:
"%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties" --JvmMs 128 --JvmMx 256
Run Code Online (Sandbox Code Playgroud)
到:
"%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties" %JAVA_OPTS%
Run Code Online (Sandbox Code Playgroud)
我运行命令时没有出现错误
service install ServiceName
Run Code Online (Sandbox Code Playgroud)
到目前为止,在我使用更改的内存设置重新安装服务之前,一切似乎都像往常一样快速运行,这让我认为 JAVA_OPTS 没有影响任何事情。
对不起,如果这是一个广泛的问题,但我还没有找到一个很好的线索来了解后端实际发生的事情。有人可以对此有所了解吗?
我有一个 Tomcat 应用程序。我现在想要将某些页面反向代理到在不同端口上侦听的不同服务器。在常规的 apache 服务器上,我会执行以下操作。
ProxyPass /dir1 http://localhost:1234/dir1
ProxyPassReverse /dir1 http://localhost:1234/dir1
Run Code Online (Sandbox Code Playgroud)
这会将 dir1 下的所有 URL 传递给侦听端口 1234 的其他服务器。我将如何在 Tomcat 上做同样的事情?
请注意,我的服务器仅运行 Tomcat 和 Java。我没有在我的设置中运行 Apache。端口 1234 上的服务器是独立的,而不是 Apache 或 Tomcat。
在决定是独立运行 Jenkins 还是在 Tomcat 中运行时,应该考虑哪些因素?我们宁愿不必使用 Tomcat,因为在这台服务器机器上没有其他需要 Tomcat 的应用程序,所以我们将为 Jenkins 设置和维护另一个应用程序。
但是在 Tomcat 中运行 Jenkins 肯定有一些优势,否则为什么不是每个人都选择独立运行它(因为它更容易设置和维护),那么这些优势是什么?独立运行而不使用 Tomcat 会丢失什么?
Jenkins 安装的大小是否会影响决策?即在一定数量的作业/构建或加载后是否有必要从一个移动到另一个,或者小型和大型 Jenkins 安装对于这两种选择是否同样有效?
Jenkins 独立使用 Winstone servlet 引擎,所以在某些方面这个问题也是关于 Winstone vs Tomcat。
我正在为 Tomcat7 使用 NIO/APR 连接器。
例如
<Connector port="8080"
protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="3000"
redirectPort="8443"
URIEncoding="UTF-8"
maxPostSize="0"
maxThreads="200"
enableLookups="false"
disableUploadTimeout="false"
maxKeepAliveRequests="-1"
useBodyEncodingForURI="true"
compression="on"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
/>
Run Code Online (Sandbox Code Playgroud)
如何确定适用于 Tomcat 的 NIO/APR 连接器的 maxThreads 的最佳大小?
maxThreads 的一个好的起始值是多少?
我目前正在https我们的生产环境中实施,但我在这里为一件小事而挠头。
SSL 在负载均衡器中终止,我们堆栈中的流程基本上是这样的:
生产:浏览器 <- https-> 负载均衡器 <- http-> Apache <- http-> 负载均衡器 <- http-> Tomcat
测试:浏览器 <- https-> nginx <- http-> 负载均衡器 <- http-> Tomcat
当我通过 HTTPS 访问我们的登录页面时:
请求头
POST /login/form HTTP/1.1
Host: www.example.org
Connection: keep-alive
Content-Length: 74
Cache-Control: max-age=0
Origin: https://www.example.org
Content-Type: application/x-www-form-urlencoded
Referer: https://www.example.org/login
Accept-Encoding: gzip,deflate,sdch
Accept-Language: nb,en-US;q=0.8,en;q=0.6
Run Code Online (Sandbox Code Playgroud)
响应头
HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 17 Jan 2014 11:16:50 GMT
Content-Length: 0
Connection: keep-alive …Run Code Online (Sandbox Code Playgroud) 我正在按照以下说明在 Apache Tomcat 中安装 GoDaddy 证书:
但是,在步骤中引用了根证书、中间证书和证书。我怎么知道哪个文件是哪个?
这些是我在下载中收到的三个文件的名称。我也尝试通过简单地双击在 Windows 中打开每一个,但我看不到它们的类型。
gd_bundle-g2-g1.crt
gdig2.crt
2b9918dccf2f1d.crt
我想将端口 8080 更改为默认的 HTTP 端口 (80),以将 Jersey 应用程序用作 HTTP-Restful API。因此,我将端口从 8080 替换为 80(在 内/etc/tomcat7/server.xml)并将其配置为使用 AUTHBIND ( /etc/defaults/tomcat7)。重新启动服务后,我在/var/log/tomcat7/catalina.out.
有人可以翻译这个错误吗?为什么 tomcat 无法创建套接字?
我正在使用 ubuntu 14.04 和 tomcat7。
INFO: Initializing ProtocolHandler ["http-bio-80"]
Jul 25, 2014 4:08:28 AM org.apache.coyote.AbstractProtocol init
SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-bio-80"]
java.net.SocketException: No such file or directory
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:181)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.createSocket(DefaultServerSocketFactory.java:49)
at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:397)
at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:640)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434)
at org.apache.coyote.http11.AbstractHttp11JsseProtocol.init(AbstractHttp11JsseProtocol.java:119)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:978) …Run Code Online (Sandbox Code Playgroud)