日魂月魄

导航

centos运维笔记

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    最近遇到ddos,所以对代码进行了一系列整改,包括升级服务器内存, 遇到的第一天将阿里云ecs的内存升级到4G,没想到第二天整点项目又无法打开了,还是内存爆满,项目打不开,服务器也升级了,接下去的第一时间就是想着改代码,想了一个临时解决办法,将所有共用的数据,临时全部保存在一个单利模式的JSONObject里面,打开app无需请求数据库,然后使用timer间隔时间去更新数据,其实项目没改之前也是这样的模式,只是部分数据还是去请求了数据库,现在改为全部缓存到JSONObject, 这样其实也没完全解决,仍然打开慢,无法不开,只是比之前好了一点,最后想到了控制单个api每次请求打开次数,每秒打开人数最多30人,这样基本是控制下来了(这样的弊端是真实用户也会被kill掉,不过是临时的策略,暂时大部分的用户能打开特么就不错了)

  这个问题基本上解决之后,当天晚上就查了下数据和日志,发现这些垃圾注册用户全部的邀请人都指向一个人,这个人其实是我们app代理,之前还聊过,没想到他做这样的坏事,第一时间联系了他微信,联系后他立即停了,并且说不是他干的。这特么是他干的是板上钉钉子了,然后问他为什么这样干,他就一口否认不是他,但是我联系他后,那攻击就停止了.......然后我报警了......没啥损失,所以关于这个事,也没给警察说得多么严重。。。。

 

   那边停止了攻击,接下来我这边就是想着怎么正儿八经的改代码了,首先想到了java msyql链接池。使用单利模式+JSONObject模拟了一个数据库链接池,初始化链接40个,链接后不close,只清空参数和链接。要使用时取出单个connections,然后移除,使用完毕后再set进JSONObject,做好之后服务器内存巨降,但是cpu使用率确爆涨到100%, 就这问题网上爬了文章给解决了,步骤大概如下, top指令查询出java的pid,通过ipd查询出进程下所有占用cpu高的线程,将线程id转化为16进字,然后使用使用jstack工具可以查询出导致内存飙升的错误原因。

   centos查询进程占用cpu过高的的原因,这里肯定就是java程序了。

   第一个指令:top,查询出占用cpu高的进程得到pid

   第二个指令:top -Hp <pid>,通过pid查询进程下所有线程。

   第三个指令:printf "%x\n" <tid>,将暂用cpu高的线程id转换为16进制

  第三个指令:使用jstack指令,输出进程占用cpu过高的原因

   

  一步输出

   jstack pid |grep tid -A 30 | more

 

centos内存定时释放

https://blog.csdn.net/wy_bk/article/details/84674935

 

 

 

 

 

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2020-05-12 16:42  L-H  阅读(272)  评论(0编辑  收藏  举报