Eric 发布的文章

关于 Java Socket 和 TCP 连接的相关问题

这个问答解释了 Socket 和 TCP 的 level 问题.
https://stackoverflow.com/questions/10240694/java-socket-api-how-to-tell-if-a-connection-has-been-closed

这篇文章介绍了 Socket close() 和 TCP 的 FIN, RST 的相关问题.
https://docs.oracle.com/javase/8/docs/technotes/guides/net/articles/connection_release.html

查看 JDK 源代码: SocketInputStream 和 SocketOutputStream 的 read 和 write 方法, 可以看到只有在 read 和 write 的时候才能知道这个 tcp 连接的状态.

对于 NIO 可以更快的知道这个消息.

HttpClient 库的介绍中, 有关于如何关掉 idle 和 expired 的连接问题:
http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d5e373

tomcat 连接数

the crux of the solution is to avoid too much queuing of requests at multiple points (OS and tomcat threads) and fail fast (return http status 503) as soon the application’s maximum capacity is reached

refer:
https://blog.insightdatascience.com/learning-about-the-http-connection-keep-alive-header-7ebe0efa209d
https://medium.com/netflix-techblog/tuning-tomcat-for-a-high-throughput-fail-fast-system-e4d7b2fc163f
https://stackoverflow.com/questions/20763999/how-does-http-keep-alive-work

关于 linux rsync & scp 命令

$ rsync --progress accessa.log.7.gz xiatian@test1.tianxiaohui.com:/home/xiatian

$ scp username@from_host:file.txt /local/directory/
$ scp file.txt username@to_host:/remote/directory/
$ scp -r username@from_host:/remote/directory/ /local/directory/ //copy目录
$ scp username@from_host:/remote/directory/file.txt username@to_host:/remote/directory/

关于 linux PS 命令

虽然经常用, 但是不是那么熟悉它竟然能提供那么多的信息. PS 是 Process Status 的缩写. top 命令的输出和 PS 很类似, 只不过是实时刷新.

ps --help all //显示所有的命令行参数
ps L //显示输出格式
ps H 16705 //显示特定进程的线程信息

ps -o ppid,pid,lwp,nlwp,%cpu,%mem,cputime,cmd,args k -%cpu H 16705 //输出一个进程的所有线程, 并且自定义格式, 按照 cpu 使用时间倒序排列.

关于格式中的nlwp: Number of Lightweight Processes. This basically amounts to the number of threads a program has running

一般结合 https://www.pslinux.online/index.php & ps --help all 就能找到想用的参数.

JVM 网络连接设置的一些属性

  1. java.net.preferIPv4Stack (default: false) 有 IPv6 就用 IPv6;
  2. java.net.preferIPv6Addresses (default: false) 为了向前兼容性;
  3. networkaddress.cache.ttl 缓存成功的 lookup 多少秒. -1=永远缓存. 若security manager被安装,则永远缓存, 若没安装, 则缓存固定时间;
  4. networkaddress.cache.negative.ttl (default: 10) 失败的 lookup 会缓存多少秒. 0=不缓存, -1=永远缓存;
  5. http.agent (default: Java1.4.0) 当发出 http request 的时候,在 header 中显示的 agent;
  6. http.keepAlive (default: true) 是否使用 http 持久连接;
  7. http.maxConnections (default: 5) 同一地址, 在 keep-live 情况下,保持多少 idle 的连接数;
    其他:
    http.proxyHost (default: )
    http.proxyPort (default: 80 if http.proxyHost specified)
    http.nonProxyHosts (default:

ftp.proxyHost (default: )
ftp.proxyPort (default: 80 if ftp.proxyHost specified)
ftp.nonProxyHosts (default: )

官方解释在这里: https://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html