我们的服务器最近用完了文件描述符,对此我有一些疑问。ulimit -n
应该给我最大数量的打开文件描述符。这个数字是 1024。我通过运行检查了打开的文件描述符的数量,lsof -u root |wc -l
得到了 2500 个 fds。这比 1024 多得多,所以我猜这意味着数字 1024 是每个进程,而不是每个用户,就像我一样。好吧,我跑了lsof -p$PidOfGlassfish|wc -l
,得到了 1300。这是我没有得到的部分。如果ulimit -n
不是每个用户或每个进程的最大进程数,那么它有什么用?它不适用于root用户吗?如果是这样,我怎么能得到关于文件描述符用完的错误消息?
编辑:我能理解的唯一方法ulimit -n
是它是否应用打开文件的数量(如 bash 手册中所述)而不是文件句柄的数量(不同的进程可以打开同一个文件)。如果是这种情况,那么仅列出打开文件的数量(grepping '/',从而排除内存映射文件)是不够的:
lsof -u root |grep /|sort -k9 |wc -l #prints '1738'
Run Code Online (Sandbox Code Playgroud)
要实际查看打开文件的数量,我需要对名称列进行过滤,仅打印唯一条目。因此,以下可能更正确:
lsof -u root |grep /|sort -k9 -u |wc -l #prints '604'
Run Code Online (Sandbox Code Playgroud)
上面的命令需要 lsof 以以下格式输出:
java 32008 root mem REG 8,2 11942368 72721 /usr/lib64/locale/locale-archive
vmtoolsd 4764 root mem REG 8,2 18624 106432 /usr/lib64/open-vm-tools/plugins/vmsvc/libguestInfo.so
Run Code Online (Sandbox Code Playgroud)
这至少给了我小于 …
我们当前的堆栈是 Apache + Tomcat + MySQL,使用ProxyPass
AJP 将请求从 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。
我是 Glassfish 的新手。
JBoss 和 Glassfish 之间有什么区别?为什么你会选择一个而不是另一个。
我正在尝试阅读 Glassfish,但在开始安装并尝试在其上部署一些应用程序之前,很难确定我可能需要的东西。
更新
如果提供有关 JBoss 和 Glassfish 比较的任何其他信息
(例如它们支持的技术、性能等),那就太好了。
我正在使用ec2 实例在amazon aws上托管一个网络应用程序。
在那种情况下,我将只运行一个应用程序。使用glassfish v3.0.1
我不想使用以下方式运行应用程序:
www.mydomain.com:8080 or www.mydomain.com:8181
Run Code Online (Sandbox Code Playgroud)
我只想使用:
www.mydomain.com or https://www.mydomain.com
Run Code Online (Sandbox Code Playgroud)
所以我将glassfish 上的http-listener-1和http-listener-2更改为在端口(分别)上运行80和443。
这被认为是不好的做法吗?我是一名软件工程师,我通常不处理服务器管理方面的事情,因此在这些方面没有太多经验。
感谢您的指导。
我已经将 Apache 设置为 Java 应用程序服务器 (GlassFish) 的反向代理,我注意到即使在空闲的开发系统上也有大约 100 个连接处于 CLOSE_WAIT 状态:
sudo netstat -n -e -p -a -t | grep httpd | grep CLOSE_WAIT | wc -l
Run Code Online (Sandbox Code Playgroud)
我正在使用以下 HTTP 代理设置:
ProxyPass /myapp http://localhost:8080/myapp ttl=20 max=1 smax=0
ProxyPassReverse /myapp http://localhost:8080/myapp
Run Code Online (Sandbox Code Playgroud)
为什么所有这些联系都存在?我已经设置了“ttl=20 max=1 smax=0”,所以我认为所有连接都会在空闲系统上被清理。应用程序服务器是否没有尽其所能清理连接?
我有一个 apache 服务器,它位于我的 glassfish 服务器前面。mydomain.com 直接转到我在 apache 上的静态文件,而不是如果您点击子域 forum.mydomain.com,它会转到 glassfish webapp 论坛/在 127.0.0.1:8080/forum/。这个代理似乎可以工作,它将我带到网络应用程序,但所有图像都丢失了!这是我如何进行虚拟主机设置。
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.mydomain.com
ServerAlias subdomain.mydomain.com mydomain.com
DocumentRoot "/usr/local/apache/htdocs"
</VirtualHost>
<VirtualHost *:80>
ServerName forum.mydomain.com
# any logging config, etc, that you need
ProxyPass / http://127.0.0.1:8080/forum/
ProxyPassReverse / http://127.0.0.1:8080/forum/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
在访问日志中,这就是我所看到的。
[15/Jan/2012:03:28:02 +0000] "GET /forums/list.page HTTP/1.1" 200 12861
[15/Jan/2012:03:28:02 +0000] "GET /forum/templates/default/images/logo.jpg HTTP/1.1" 404 1075
[15/Jan/2012:03:28:02 +0000] "GET /forum/templates/default/styles/style.css?1326582403934 HTTP/1.1" 404 1075
[15/Jan/2012:03:28:02 +0000] "GET /forum/templates/default/images/icon_mini_recentTopics.gif HTTP/1.1" 404 1075
[15/Jan/2012:03:28:02 +0000] "GET /forum/templates/default/images/icon_mini_search.gif HTTP/1.1" 404 1075 …
Run Code Online (Sandbox Code Playgroud) 我这里有 Glassfish 2.1.1,我需要取消部署 war 应用程序。问题是应用程序已损坏并阻止 Glassfish 服务器启动,因此我需要在服务器关闭时取消部署它。
asadmin undeploy
需要连接到运行服务器...
所以问题是 - 如何从离线 Glassfish 服务器取消部署。
我在 Glassfish 3.1 中有一个连接池来连接到 SqlServer 2008 Express,这个池工作正常,但是当 Glassfish 重新启动时,连接池无法 ping 并停止工作。为了再次工作,我将 url 主机名从“localhost”更改为“127.0.0.1”或相反......显然这个问题只发生在 Glassfish 在 Windows Server 2008 中运行时,当我在 Linux 服务器中运行 Glassfish 时没有问题这发生...
已编辑
[#|2012-06-20T14:21:34.992-0300|WARNING|oracle-glassfish3.1.2|javax.enterprise.resource.resourceadapter.com.sun.enterprise.connectors.service|_ThreadID=24;_ThreadName=Thread-2;|RAR8054: Exception while creating an unpooled [test] connection for pool [ erp_hm_pool ], null|#]
[#|2012-06-20T14:21:35.006-0300|SEVERE|oracle-glassfish3.1.2|org.glassfish.admingui|_ThreadID=25;_ThreadName=Thread-2;|RestResponse.getResponse() dá FAILURE. endpoint = 'http://localhost:48/management/domain/resources/ping-connection-pool.json'; attrs = '{id=erp_hm_pool}'|#]
[#|2012-06-20T14:22:42.187-0300|WARNING|oracle-glassfish3.1.2|javax.enterprise.resource.resourceadapter.com.sun.enterprise.resource.pool.resizer|_ThreadID=26;_ThreadName=Thread-2;|RAR5058: Error while Resizing pool erp_hm_pool. Exception : null|#]
[#|2012-06-20T14:22:42.193-0300|WARNING|oracle-glassfish3.1.2|javax.enterprise.resource.resourceadapter.com.sun.enterprise.resource.pool.resizer|_ThreadID=26;_ThreadName=Thread-2;|RAR5058: Error while Resizing pool erp_hm_pool. Exception : null|#]
[#|2012-06-20T14:22:42.194-0300|WARNING|oracle-glassfish3.1.2|javax.enterprise.resource.resourceadapter.com.sun.enterprise.resource.pool.resizer|_ThreadID=26;_ThreadName=Thread-2;|RAR5058: Error while Resizing pool erp_hm_pool. Exception : null|#]
[#|2012-06-20T14:22:42.195-0300|WARNING|oracle-glassfish3.1.2|javax.enterprise.resource.resourceadapter.com.sun.enterprise.resource.pool.resizer|_ThreadID=26;_ThreadName=Thread-2;|RAR5058: Error while Resizing pool erp_hm_pool. …
Run Code Online (Sandbox Code Playgroud) 我在尝试设置集群时遇到问题。
我将描述详细的配置(因为我找不到在两台不同的电脑上制作的集群示例,所有这些都是在一个本地主机上制作的):
3 个 ubuntu 虚拟机:1 个域管理员和 2 个实例。
我在每个实例上安装(解压缩)1 个 glassfish 服务器并启动它们。然后我在域管理员(也是一个 glassfish)上为每个节点创建了一个 ssh 节点
所以我有
节点1 192.168.193.134 SSH 节点
节点2 192.168.193.133 SSH 节点
均成功连接。
最后我通过命令行创建了集群,如下所示
:~$ asadmin create-cluster clusterm
:~$ asadmin create-instance --node node1 --cluster clusterm inst1
:~$ asadmin create-instance --node node2 --cluster clusterm inst2
但是当我尝试启动集群 ( :~$ asadmin start-cluster clusterm
) 时,它失败并抛出此错误:
remote failure: inst1: Could not start instance inst1 on node node1 (192.168.193.134).
Command failed on node node1 (192.168.193.134): Previous synchronization failed at May 20, 2013 …
Run Code Online (Sandbox Code Playgroud) glassfish ×10
apache-2.2 ×4
mod-proxy ×2
tomcat ×2
cluster ×1
domain-name ×1
jboss ×1
jetty ×1
linux ×1
nginx ×1
performance ×1
port ×1
root ×1
sql-server ×1