我们正在使用 BTM 2.1.2 运行 Jetty 8.1.0。
我们使用 Postgres 作为我们的数据库。
一切都很好,除了当我们在某个表的主要=空的条件下运行任何查询时,服务器会失去与数据库的连接。以下是我们看到的异常:
org.postgresql.util.PSQLException:错误:整数的无效输入语法:“null”
at
...
...长堆栈转储随之而来...
...
2012 年 6 月 15 日下午 12:20:19 org.eclipse。 jetty.server.AsyncHttpConnection 句柄信息:EndPoint 不长进度:stack 100dump SCEP@162b333{l(/74.93.245.209:60506)<->r(/10ensues.99.21.87:80),d=true,open=true ,ishut=false,oshut=false,rb=false,wb=false,w=false,i=5r}-{AsyncHttpConnection@18fc7ca,g=HttpGenerator{s=3,h=-1,b=20909,c= -1},p=HttpParser{s=0,l=16,c=0},r=1} AsyncHttpConnection@18fc7ca,g=HttpGenerator{s=3,h=-1,b=20909,c=-1 },p=HttpParser{s=0,l=16,c=0},r=1 2012 年 6 月 15 日下午 12:20:19
org.eclipse.jetty.server.AsyncHttpConnection 句柄警告:关闭端点没有任何进展:200 SCEP@162b333{l(/74.93.245.209:60506)<->r(/10.99.21.87:80),d=true,open =true,ishut=false,oshut=false,rb=false,wb=false,w=false,i=5r}-{AsyncHttpConnection@18fc7ca,g=HttpGenerator{s=3
此事件后的任何查询均会因以下异常而中断
它发生在我们的生产服务器上!是什么导致了这个问题?
更新:
这是代码!
我知道我们不应该使用 primarykey = null 查询,因为 primary 永远不能为 null。但是它的参数和空验证被遗漏了!
令人惊讶的是,Jetty 6 与它配合得很好!即使在运行此查询之后,它也完全没有问题。它只是 Jetty 8-1-0,在运行此类查询时永久丢失数据库连接。直到我重新启动服务器
String query = "select * from table where primarykey="+parameter;
Statement lStatement = null;
Connection lConnection = null;
ResultSet lResultSet = null;
try {
lConnection = DBAccess.getConnection();
lStatement = lConnection.createStatement();
lResultSet = lStatement.executeQuery( query );
while ( lResultSet.next() ) {
mLogger.info("The result set is : "+lResultSet.toString());
}
} catch( Exception e ) {
e.printStackTrace();
mLogger.error("Exception occurred while trying to runQuery : "+e.getMessage());
} finally {
DBAccess.closeResultSet( lResultSet );
DBAccess.closeStatement( lStatement );
DBAccess.closeDBConnection( lConnection );
}
Run Code Online (Sandbox Code Playgroud)
更新
有人可以帮我解决这个问题吗?我仍在寻找答案。我每天都在使用 Jetty 8-1-0 遇到不同的问题。
我删除了 Jetty.xml 中的事务管理配置并使用默认 JNDI 配置进行部署。有一段时间事情很顺利。
上周,服务器开始因“打开的文件太多”问题而哭泣。一旦我增加了可以在服务器上打开的文件数量,它就得到了修复。今天,Jetty 又因 OutOfMemoryError 死了。这里值得注意的是内存泄漏发生在“Too May Open Files”错误发生的同一个地方。我猜它是导致问题的 HTTPClient 。(好吧,我会在 stackoverflow 中发布相同的内容。我认为这不是 DBA 问题。但所有这些都是从同一个地方开始的。所以,如果有意义的话,我想在这里记录下来。
看起来变量null中的parameter是单引号的,例如'null'。在 SQL 查询上下文中,空值不带引号。
事情应该是这样的:
=# select 1 from t where i = null;
?column?
----------
(0 rows)
Run Code Online (Sandbox Code Playgroud)
这就是你所拥有的:
=# select 1 from t where i = 'null';
ERROR: invalid input syntax for integer: "null"
LINE 2: select 1 from t where i = 'null';
Run Code Online (Sandbox Code Playgroud)
因此,您要么需要从parameter变量中删除任何引号,要么使用与数据库适配器的参数绑定。第二种选择是更可取的。
| 归档时间: |
|
| 查看次数: |
473 次 |
| 最近记录: |