jcpc over tcp / ip比本地机器慢得多

时间:2012-04-20 06:42:44

标签: java sql-server jdbc tcp jboss

我们有一个三层Java应用程序,Jboss作为应用程序服务器,MS Sql Server作为数据库服务器。我们使用jdbc类型4从App服务器连接到Db服务器。

我们已经看到,在同一台机器上运行Jboss和DB服务器,如果它们位于不同的机器上,则会导致性能提升约50%。如何解释这么大的差异? Jboss和DB Server运行的机器是非常好的工作站(具有最好的intel CPU),网络是带有业务标准基础架构的1Gb以太网。

您认为这是我们网络上的问题(延迟,吞吐量......)还是有其他原因可以解释这些差异?

3 个答案:

答案 0 :(得分:2)

以下因素可能会影响上述情况的表现,

1)访问数据库时的网络延迟:在本地计算机中,它将小于1毫秒。如果是DB服务器&应用服务器位于不同的位置,延迟会更多。如果您为特定请求发出“n”个DB调用,则延迟将为n * 2 *延迟。

解决方案:减少通话次数。使用缓存作为参考数据集。

2)访问应用服务器的位置:如果用户位于美国和美国。 appserver在印度然后网络延迟大约200ms。如果很多css& js文件被加载到页面上,这将导致很多延迟,具体取决于所使用的浏览器。

解决方案:将所有js文件合并到一个文件中。使用GZip用于js& CSS。缩小JS。有效使用浏览器缓存。

3)如果上述两个不是瓶颈,请检查CPU,内存和放大器。部署应用程序的服务器上的磁盘速度。

答案 1 :(得分:1)

嗯,有太多可能性: 1)网络设置 2)防火墙 3)实施通信服务 4)等。

我建议禁用所有服务,选项和过滤器,然后尝试逐个启用。 如果这不起作用,请检查您的代码。

祝你好运,这并不容易!

答案 2 :(得分:1)

不知道您的配置,SQL Server默认使用命名管道作为传输。在本地,这将是内存进程内通信,其比TCP / IP更快。如果是远程的,管道将需要通过TCP / IP传输,这增加了它自己在TCP / IP堆栈上下编组/解组的开销(以及实际传输)。

你说你使用TCP,但可能是你实际上在本地使用命名管道。您的连接字符串是什么样的?