java.nio.file.FileSystemException: Too many open files

这个程序启动时跑的好好的,跑一晚上就会出问题,报错如下:

java.nio.file.FileSystemException: database: Too many open files

        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91)

        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)

        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)

        at sun.nio.fs.UnixFileSystemProvider.newDirectoryStream(UnixFileSystemProvider.java:427)

        at java.nio.file.Files.newDirectoryStream(Files.java:589)

        at org.drinkless.tdlib.example.data.Record.syncAccounts(Record.java:120)

        at org.drinkless.tdlib.example.task.MainTask.getTask(MainTask.java:73)

        at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:498)

        at org.drinkless.tdlib.example.task.State.next(State.java:82)

        at org.drinkless.tdlib.example.task.State.run(State.java:29)


应该是打开的文件数量超过了系统的上限导致的,使用 lsof -p pid | wc -l  查看进程打开的文件数:

java    4568 root    3r   REG              253,0  72959474   33818935 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre/lib/rt.jar

java    4568 root    4r   REG              253,2   4842440 1073741983 /home/tdjava/2/tdjava-all.jar

java    4568 root    5w   REG              253,2  38445155 1073741926 /home/tdjava/2/client.log

java    4568 root    6w   REG              253,2 103067118 1073741928 /home/tdjava/2/tdlib.log

java    4568 root    7r   REG              253,0    736006   33818926 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre/lib/jsse.jar

java    4568 root    8u  unix 0xffff8800a74aa800       0t0     974935 socket

java    4568 root    9r   CHR                1,8       0t0          9 /dev/random

java    4568 root   10r   CHR                1,9       0t0         10 /dev/urandom

java    4568 root   11r   CHR                1,8       0t0          9 /dev/random

java    4568 root   12r   CHR                1,8       0t0          9 /dev/random

java    4568 root   13r   CHR                1,9       0t0         10 /dev/urandom

java    4568 root   14r   CHR                1,9       0t0         10 /dev/urandom

java    4568 root   15r   REG              253,0    107934   33818924 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre/lib/jce.jar

java    4568 root   16r   REG              253,0     30583     140337 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre/lib/ext/sunec.jar

java    4568 root   17r   REG              253,0    295008     140338 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre/lib/ext/sunjce_provider.jar

java    4568 root   18r   REG              253,0   3507901   33818934 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64/jre/lib/resources.jar

java    4568 root   19u  unix 0xffff8801fda47400       0t0     958880 socket

java    4568 root   20u  IPv6             958882       0t0        TCP bogon:57192->101.200.82.233:8801 (ESTABLISHED)

java    4568 root   21r   DIR              253,2       131 3221225610 /home/tdjava/2/database

java    4568 root   22r   DIR              253,2       131 3221225610 /home/tdjava/2/database

java    4568 root   23r   DIR              253,2       131 3221225610 /home/tdjava/2/database

java    4568 root   24r   DIR              253,2       131 3221225610 /home/tdjava/2/database

java    4568 root   25r   DIR              253,2       131 3221225610 /home/tdjava/2/database

java    4568 root   26r   DIR              253,2       131 3221225610 /home/tdjava/2/database

java    4568 root   27r   DIR              253,2       131 3221225610 /home/tdjava/2/database

java    4568 root   28r   DIR              253,2       131 3221225610 /home/tdjava/2/database

java    4568 root   29r   DIR              253,2       131 3221225610 /home/tdjava/2/database

java    4568 root   30r   DIR              253,2       131 3221225610 /home/tdjava/2/database

java    4568 root   31r   DIR              253,2       131 3221225610 /home/tdjava/2/database

java    4568 root   32r   DIR              253,2       131 3221225610 /home/tdjava/2/database

java    4568 root   33r   DIR              253,2       131 3221225610 /home/tdjava/2/database

其中 /home/tdjava/2/database 被打开了N次,却没有关闭。检查代码,应该是流没有关闭:

修改为:

提醒自己注意使用完资源一定要考虑,是不是需要释放。

第一次买房成功

WechatIMG1707.jpeg

从定目标决定买,到交房一共只用了78天,这速度还可以的吧,感觉就好像去超市买菜一样,哈哈。

当然期间也不是一帆风顺,经历了一次摇号失败,被房东放鸽子,被新环境中介黑了1500块钱。

好在后面房子的房东比较给力,京茂的中介服务也很好,办事效率高,整个交易流程都特别顺畅,从看房、签合同、过户、公积金面签、交房,期间北京长沙来回跑了3趟就把事都办完了。

要特别感觉父母和亲戚朋友们,没有你们这件事办不好。

How to Update to gcc4.9.x on Centos7

http://happy123.me/blog/2017/04/15/how-to-update-to-gcc4-dot-9-x-on-centos7/

现在很多软件包默认编译要求GLIBCXX >=3.4.20,碰到这种事redhat系又哭了,目前Centos7.x默认仓库里的gcc还是4.8.5的,所以需要一个办法升级gcc相关组件>=4.9.1。

CentOS下升级gcc版本有两个途径,一个是添加其他源进行自动升级,一个是手动编译升级,这里先顺便讲下自动升级的两个办法:

添加Fedora源

在 /etc/yum.repos.d 目录中添加文件 FedoraRepo.repo ,并输入以下内容:

然后执行

使用Devtoolset-4升级

CentOS7搭建sock5代理

1、从官网下载源码

2、配置编译环境及安装编译SS5依赖组件

3、解压、编译、安装

4、修改SS5配置文件

①修改认证方式 /etc/opt/ss5/ss5.conf,查找取消下面两行注释

安装后这两行是注释的(当时弄的时候没注意,后面用客户端通过代理服务器连接测试时一直显示错误的认证方式,找了好久)。 
默认的是:无用户认证。 
如果想要使用 username/password 用户认证方法,需要将上面两行修改成下面这样:

②添加用户名及密码 /etc/opt/ss5/ss5.passwd,每行一个用户+密码(之间用空格)

给bash文件增加可执行权限

④禁用ss5日志,这个日志刷的特别猛,很快就会将硬盘占满。具体修改/etc/rc.d/init.d/ss5这个文件,加上-m参数即可,注意有几个地方都要加

5、启动ss5

启动完成后,可以使用以下命令查看连接情况

6、将ss5加入开机自动启动

长沙看房

    预算120W,3房,偏向河西。

    最近也慢慢在看房,可能是刚过年,现在新房开盘的很少,没有找到合适的。而且人不在长沙,各种不方便,暂时先网上看了一波二手房。


1、保利麓谷林语(二手房)

1520345407638349.png

2013年左右的楼,西二环外。6号线地铁在建,中段(枫林路站站--东四线站)已于 2016 年12月28日开工建设,计划2021 年建成开通。这个盘靠近2个地铁口。学校就在小区边上。

  • 房价:房天下2月份11573元/平,链家2月份12212元/平

  • 租金:3房2k-2.5k(链家)

  • 学区:明德麓谷学校(小学、初中) 

  • 周边:

  • 优势:有学区、在建地铁、麓谷板块IT产业多就业方便。

  • 缺点:

2、沁园春御院(二手房)

41EAC2B3-FD8E-455E-AB3D-D45AA25F17BC.png

2010年左右的楼,二环内,6号线在建。

  • 房价:房天下2月份13078元/平

  • 租金:3房2.5k-3k左右(房天下,链家)

  • 学区:岳麓区第一小学 

  • 周边:

  • 优势:河西核心,地段好,好学区,在建地铁。

  • 缺点:有点贵,没初中?

3、保利西海岸(二手房)

B00F4CA7-9D98-4010-807F-D76FEAFA2CB3.png

这两年的房子,地段,交通,学区都好,房天下2月份均价14897元/平,钱包有点无力承受。

Simple antidebugging and antiantidebugging

http://everettjf.com/2015/12/28/simple-ios-antidebugging-and-antiantidebugging/

ptrace

保护

可以在main函数中先调用ptrace。

去掉保护

参考文章 https://everettjf.github.io/2015/12/20/amap-ios-client-kill-anti-debugging-protect/

RESTRICT section

学习完这本书,发现cycript太好用了,Objective-C这语言太灵活了…… 但,有些程序无法使用。

保护

在Project的 Other Linker Flags 增加

去掉保护

基本思路就是,

  1. ps -e | grep /var 找到AppBinary路径

  2. 把AppBinary复制出

  3. 二进制编辑器(iHex等)修改__RESTRICT和__restrict为其他值。(比如:__RRRRRRRR和__rrrrrrrr。保证长度不变就行啦)

  4. ldid -S AppBinary 重签名。

  5. Cydia中安装 AppSync

在这篇文章中 http://www.iosre.com/t/tweak-app-app-tweak/438

参考文章

  1. http://www.iosre.com/t/tweak-app-app-tweak/438

  2. http://www.samdmarshall.com/blog/blocking_code_injection_on_ios_and_os_x.html155

  3. http://geohot.com/e7writeup.html50

  4. http://www.opensource.apple.com/source/dyld/dyld-210.2.3/src/dyld.cpp42

  5. https://theiphonewiki.com/wiki/Launchd.conf_untether17

  6. http://navillezhang.me/

漫谈iOS程序的证书和签名机制

http://www.pchou.info/ios/2015/12/14/ios-certification-and-code-sign.html

接触iOS开发半年,曾经也被这个主题坑的摸不着头脑,也在淘宝上买过企业证书签名这些服务,有大神都做了一个全自动的发布打包(不过此大神现在不卖企业证书了),甚是羡慕和崇拜。于是,花了一点时间去研究了一下iOS这套证书和签名机制,并撰文分享给需要的朋友。由于本人才疏学浅,多有遗漏或错误之处,还请大神多多指教。

非对称加密和摘要

非对称加密的特性和用法

非对称加密算法可能是世界上最重要的算法,它是当今电子商务等领域的基石。简而言之,非对称加密就是指加密密钥和解密密钥是不同的,而且加密密钥和解密密钥是成对出现。非对称加密又叫公钥加密,也就是说成对的密钥,其中一个是对外公开的,所有人都可以获得,称为公钥,而与之相对应的称为私钥,只有这对密钥的生成者才能拥有。公私钥具有以下重要特性:

  • 对于一个私钥,有且只有一个与之对应的公钥。生成者负责生成私钥和公钥,并保存私钥,公开公钥

  • 公钥是公开的,但不可能通过公钥反推出私钥,或者说极难反推,只能穷举,所以只要密钥足够长度,要通过穷举而得到私钥,几乎是不可能的

  • 通过私钥加密的密文只能通过公钥解密,公钥加密的密文只有通过私钥解密

由于上述特性,非对称加密具有以下的典型用法:

  • 对信息保密,防止中间人攻击:将明文通过接收人的公钥加密,传输给接收人,因为只有接收人拥有对应的私钥,别人不可能拥有或者不可能通过公钥推算出私钥,所以传输过程中无法被中间人截获。只有拥有私钥的接收人才能阅读。此用法通常用于交换对称密钥

  • 身份验证和防止篡改:权限狗用自己的私钥加密一段授权明文,并将授权明文和加密后的密文,以及公钥一并发送出来,接收方只需要通过公钥将密文解密后与授权明文对比是否一致,就可以判断明文在中途是否被篡改过。此方法用于数字签名

著名的RSA算法就是非对称加密算法,RSA以三个发明人的首字母命名。

非对称加密算法如此强大可靠,却有一个弊端,就是加解密比较耗时。因此,在实际使用中,往往与对称加密和摘要算法结合使用。对称加密很好理解,此处略过1w字。我们再来看一下摘要算法。

阅读更多关于漫谈iOS程序的证书和签名机制 ...