https中的connection字段为close情况

1 篇文章 0 订阅
1 篇文章 0 订阅

有的网站会在服务器运行一段时间后down掉,有很多原因可能造成这种现象:比如tomcat堆和非堆内存设置不足,程序没能释放内存空间造成内存溢出,或者某些进程一直运行没能释放,造成cup资源大量消耗。

  但除了程序本身的原因,还有可能是客服端访问造成(当然这个客户端也包含如蜘蛛软件等搜索引擎),如果服务器和客户端建立的是长链接(可以用"netstat -a"命令查看网络访问信息),这就需要对http响应头的connection做一定的设置。

  介绍如下:
  1. 解释一下:

    在http1.1中request和reponse header中都有可能出现一个connection头字段,此header的含义是当client和server通信时对于长链接如何进行处理。

    在http1.1中,client和server都是默认对方支持长链接的, 如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close.

    不论request还是response的header中包含了值为close的connection,都表明当前正在使用的tcp链接在请求处理完毕后会被断掉。以后client再进行新的请求时就必须创建新的tcp链接了。 HTTP Connection的 close设置允许客户端或服务器中任何一方关闭底层的连接双方都会要求在处理请求后关闭它们的TCP连接。

2.如何在程序中设置:

可以在过滤器中加入:response.setHeader("connection", "close");

与之相关:解决服务器产生大量close_wait问题

要解决这个问题的可以修改系统的参数(/etc/sysctl.conf文件),系统默认超时时间的是7200秒,也就是2小时。

默认如下:

tcp_keepalive_time = 7200 seconds (2 hours)
tcp_keepalive_probes = 9
tcp_keepalive_intvl = 75 seconds

意思是如果某个TCP连接在idle 2个小时后,内核才发起probe.如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效

总的来说,一般只有服务器端才会将连接down掉,游览器默认的requst请求都是keep-alive

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您在 Oracle 数据库定义表的时候添加了文注释,那么在使用 JDBC API 获取字段名时,会返回文注释而不是字段名。 这是因为在 Oracle 数据库字段名和字段注释是分开存储的。JDBC API 获取字段名时,使用的是 `ALL_TAB_COLUMNS` 视图,而该视图的 `COLUMN_NAME` 对应的是字段注释,而不是字段名。如果您需要获取字段名而不是注释,可以使用 `ALL_TAB_COLS` 视图,该视图的 `COLUMN_NAME` 对应的是字段名。 以下是一些示例代码: ```java // 假设您已经连接到了数据库,使用了 PreparedStatement 执行 SQL 查询 PreparedStatement statement = connection.prepareStatement("SELECT * FROM my_table"); // 获取 ResultSetMetaData 对象,使用它来获取字段名 ResultSetMetaData metaData = statement.getMetaData(); int columnCount = metaData.getColumnCount(); for (int i = 1; i <= columnCount; i++) { // 使用 ALL_TAB_COLS 视图获取字段名 String columnName = metaData.getTableName(i) + "." + metaData.getColumnName(i); // 处理字段名,比如输出到控制台 System.out.print(columnName + "\t"); } System.out.println(); // 遍历查询结果数据 ResultSet resultSet = statement.executeQuery(); while (resultSet.next()) { // 使用 ResultSet 对象获取数据,可以使用字段名或者字段的索引 String column1Data = resultSet.getString("column1"); int column2Data = resultSet.getInt(2); // 处理数据,比如输出到控制台 System.out.println(column1Data + "\t" + column2Data); } // 记得关闭 ResultSet 和 PreparedStatement 对象 resultSet.close(); statement.close(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值