Linux服务器Socket资源泄露导致无法连接的问题

查看当前进程的堆使用情况:

# jmap -histo:live 14416 | less

 num     #instances         #bytes  class name
----------------------------------------------
   1:        260861       29216432  java.net.SocksSocketImpl
   2:        268685       28249496  [B
   3:       1332147       21314352  java.lang.Object
   4:        278044       16152952  [Ljava.lang.Object;
   5:        260854       12520992  java.net.SocketInputStream
   6:        260854       12520992  java.net.SocketOutputStream
   7:        123610       11274280  [C
   8:        262744       10509760  java.lang.ref.Finalizer
   9:        260899        8348768  java.io.FileDescriptor
  10:        260855        8347360  java.net.Socket
  11:        270081        6481944  java.util.ArrayList
  12:        121312        3881984  java.util.HashMap$Node
  13:        122592        2942208  java.lang.String
  ......

# jmap -histo:live 31312 | grep Socket


1000ms统计一次gc情况,一共统计100次。下面两条命令,前者统计的是k字节,后者统计的是百分比:

# jstat -gc     14416  1000 5

# jstat -gcutil 14416  1000 5

  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
 75.51   0.00  63.93   6.01  97.30  96.50    258  108.940     7    2.067  111.007
 75.51   0.00  71.94   6.01  97.30  96.50    258  108.940     7    2.067  111.007
 75.51   0.00  81.93   6.01  97.30  96.50    258  108.940     7    2.067  111.007
 75.51   0.00  89.92   6.01  97.30  96.50    258  108.940     7    2.067  111.007
 75.51   0.00  97.91   6.01  97.30  96.50    258  108.940     7    2.067  111.007
 
 

查看三代使用情况:

# jstat -gccapacity  14416

 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC 
1638400.0 1638400.0 1638400.0 382464.0 381440.0 874496.0  3276800.0  3276800.0  3276800.0  3276800.0      0.0 1112064.0  70104.0      0.0 1048576.0   8448.0    270     7


查看堆的使用状况信息:

# jmap -heap 14416

Attaching to process ID 14416, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.77-b03


using thread-local object allocation.
Parallel GC with 8 thread(s)


Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 5033164800 (4800.0MB)
   NewSize                  = 1677721600 (1600.0MB)
   MaxNewSize               = 1677721600 (1600.0MB)
   OldSize                  = 3355443200 (3200.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 0 (0.0MB)


Heap Usage:
PS Young Generation
Eden Space:
   capacity = 937426944 (894.0MB)
   used     = 75179160 (71.6964340209961MB)
   free     = 862247784 (822.3035659790039MB)
   8.019735349104709% used
From Space:
   capacity = 370147328 (353.0MB)
   used     = 368914224 (351.8240203857422MB)
   free     = 1233104 (1.1759796142578125MB)
   99.66686129907711% used
To Space:
   capacity = 370147328 (353.0MB)
   used     = 0 (0.0MB)
   free     = 370147328 (353.0MB)
   0.0% used
PS Old Generation
   capacity = 3355443200 (3200.0MB)
   used     = 2391475280 (2280.6885528564453MB)
   free     = 963967920 (919.3114471435547MB)
   71.27151727676392% used


33058 interned Strings occupying 3315272 bytes.

Linux系统的最大文件句柄数(Linux下一切皆文件),系统默认1024个,ulimit -n 可查看用户级的。当存在句柄泄露没有释放时,系统会报错:Too many open files。


当前shell的用户级限制

# ulimit -n [cnt]

查看/设置当前shell的当前用户所有进程最大能打开的最大文件数。


设置所有shell的用户级限制

/etc/security/limits.conf

root soft nofile 4096 

root hard nofile 4096

修改文件,可设置所有shell的当前用户所有进程最大能打开的最大文件数,比如一个用户登录多个shell,该用户的所有shell打开的最大数限制受此限制。


设置系统级限制

查看整个系统的最大文件句柄数限制(非用户级别的):

# cat /etc/sysctl.conf

fs.file-max=2000000 #限制整个系统最大文件句柄数 

如果要修改以后,需要执行下面命令,使配置生效:

# sysctl -p 


查看Linux系统打开的文件句柄数:

# lsof -n | awk '{print $2}'| sort | uniq -c | sort -nr 

   3009 31312
     15 7364
     14 8002
     14 7777
     14 7382
     14 665
     14 6308
     ...


第一列:进程打开的文件句柄数
第二列:PID


如果没有该命令,可以用yum安装:yum install -y lsof


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值