记一次Mongodb 服务器CPU占用过高的问题排查

某日浏览服务器CPU占用,发现Mongodb的服务器占用CPU达到80%以上。
通过慢查询和当前运行的资源查询,没有找到占用资源过多的查询。
网上爬文也是没有头绪。于是查询Mongodb的日志,发现是日志偏异的警告,并且写日志超时。

2020-11-04T20:26:43.391+0000 W  STORAGE  [FlowControlRefresher] Flow control is engaged and the                   sustainer point is not moving. Please check the health of all secondaries.

这个时候,如果直接以关键字去进行搜索引擎搜索,是查不到任何信息的。根据日志的提示,我们可以知道,问题大概是发生在主从复制上。
于是登录到从服务器查询。服务器架构采用的是replaceSet的架构,主服务器对外提供服务,Secondary服务器用于做数据备份,并没有对外提供服务。

2020-11-06T06:00:28.925+0000 I  CONTROL  [LogicalSessionCacheReap] Failed to reap transaction table: FailedToSatisfyReadPreference: Could not find host matching read preference { mode: "primary" } for set rs1


2020-11-06T06:11:01.675+0000 I  ELECTION [replexec-73] Not starting an election, since we are not electable due to: Not standing for election because I cannot see a majority (mask 0x1)

上述日志,可以说明找不到主库。联想到之前有一次错误的操作过防火墙服务,有可能是此操作导致的找不到主节点。于是重启子节点的Mongodb服务。
重启后,子服务的主从同步正常,主服务器的CPU占用率也下降了。

自动检测tomcat服务的shell脚本

在实际工作中,需要实时的检测Tomcat服务的状态,并且如果在Tomcat停止时,自动的重启Tomcat服务,以方便我们的应用程序不被中断。

实现思路是使用Linux自带的计划任务,启动一个时间间隔为5分钟的检查服务,这个可以放到 /etc/crontab文件中。

*/5 * * * * su - root -c /root/restartTomcat.sh

接下为就是要实现这个.sh文件,我们可以参考下面的模板。基本思路就是通过PS得出当前的系统进程,然后通过文件的路径来确定指定的进程是否已经启动,如果没有启动,则先执行程序停止服务,再执行启动服务。
示例代码如下:

#!/bin/bash

pnum_server=`ps -wef|grep tomcat |grep -v grep |wc -l`

if test $pnum_server -lt 1

then

  /usr/local/tomcat/bin/shutdown.sh

   sleep 2s

  /usr/local/tomcat/bin/startup.sh

fi

如果这样写你可能会遇到一个小插曲,就是提示fi附近有语法错误。这个问题的原因是由于Windows下面的换行符导致。
因此你可以使用vi打开脚本文件,执行:set fileformat=unix,:wq保存即可。

微信开发之分享和获取用户信息

众所周知,微信是当之无愧的No.1,在产品推广和业务路演的过程中,扫一扫成了最为常见的功能。扫一扫就能获取用户的基础信息,然后可以进行投票啊,留言啊之类的功能几乎是网页的必备功能。 微信最常用的就是分享和获取用户信息的功能,这两个接口尽管微信都有详细的文档,网上也有相应的教程,但是过程中还是有一些坑的,在此记录一下。

继续阅读微信开发之分享和获取用户信息

使用Quartz定时器在Java中执行计划任务

在JavaEE系统中,计划任务的执行是一项很普通的工作,需要我们定时执行一些维护和例行的任务。比如定时统计,发送邮件,报表,甚至通知和提醒等。

计划任务的实现有多种方式。比如使用数据库的定时任务(Jobs和Events),服务器的计划任务(Windows的计划作任务,Linux的Crontab系统。

那么Java本身能否实现定时任务呢,当然是可以的,我们可以使用Java.util.Timer 和 Java.util.TimerTask来完成这项工作,但是这种方法在调用上其实是不方便,需要大量的代码。解决这个问题的通行方法是使用Quartz框架。它是一个基于Java的计划任务框架,在定时执行上,可以使用Linxu的CronExperssion,便于使用和维护。

继续阅读使用Quartz定时器在Java中执行计划任务

Reactive Native 在IOS中集成中的踩坑经历

什么是React Native

React-Native 是由Facebook出品的一款可以使用JavaScript来编写原生app的框架,官方说明是:A framework for building native app with React(一个使用React来编写原生app的框架),然而这个React也是由该公司出品的一款可以用来编写用户界面的JS库。二者的出现,以其强大的功能和便捷的使用方式迅速被广大开发者使用,并在各大平台的应用研发中占据了自己的一席之地。

继续阅读Reactive Native 在IOS中集成中的踩坑经历

C#代码中实现两个表(DataTable)的关联查询(JOIN)

之前通常都是使用SQL直接从数据库中取出表1和表2关联查询后的数据,只需要用一个JOIN就可以了,非常方便。近日遇到一种情况,两个表中的数据已经取到代码中,需要在代码中将这两个表关联起来,并得到它们横向拼在一起之后的完整数据。

继续阅读C#代码中实现两个表(DataTable)的关联查询(JOIN)

启示录读后感

4P营销理论相信大家都知道:产品(Product):注重产品功能,要有核心卖点,即包含产品的实体、服务、品牌、包装等;价格(Price):依据不同的市场定位来制定不同的价格策略,指企业出售产品所追求的经济回报;渠道(Place):企业为使其产品进入和达到目标市场,所组织并实施的各种活动,包括途径、环节、场所、仓储和运输等;促销(Promotion):即包含广告、人员推销、营业推广与公共关系等手段。其中产品的重要性毋庸置疑。

每个企业都梦寐以求打造爆款产品,成功产品为什么凤毛麟角?到底什么样的产品才算是好产品呢?如何打造一款让用户欲罢不能的产品?怎样发掘有价值的产品?这些都是我心中的疑问。我决定再次拿起这本书,有目的的去阅读并总结分享。

之前读书有个毛病,特别慢,有时候看着看着就睡着了,有时候被其他的事情打断,看完一个章节就从此搁置了。看了很多简书上的读书达人,一小时快读一本书,我只想说臣妾做不到啊! 后来学习了读书方法实践之后,确实效率高很多。

本书作者:Marty Cagan,作为负责定义和开发产品的高级经理人为多家一流企业工作过,包括惠普、网景、美国在线。曾担任eBay产品管理及产品设计高级副总裁,负责规划全球电子商务网站的产品和服务。亲历了个人电脑、互联网、电子商务的起落沉浮,致力于通过写作、演讲、培训 帮助客户打造富有创意的产品。创办了硅谷产品集团(SVPG),为“财富500强”企业和广大创业型企业提供产品咨询服务,他的客户包括Yahoo!、eBay、TiVo、BBC、PROTRADE Sports……
继续阅读启示录读后感

超级奢侈的码农享受

沉浸式电脑椅,帝王的选择。只要30万。

Emperor系列的一体工作游戏站其实早在CES2009已经展出过,200是它最新的一代。 官网介绍说,这是终极电脑工作站解决方案,具备触摸板,空气过滤系统,电动皮椅,3X27寸显示屏,光疗系统,超猛音频系统。安卓操控。售价只要30万(起),强烈期望土豪晒单,或者值得买众测也行。

一把舒适的椅子陪我们寂寞

一桌在手,天下我有

想象一下码农们在这台桌子上左右开弓的样子,就像是操控人生的上帝有米有,开启多个工作模式,完全不会精分,关爱自己家的码农,送给他一张未来会更加辛勤工作的桌子。

ios inHouse 发布应用

一、明确几个概念

1、企业版IDP: 即iOS Development Enterprise Program。注意是$299/Year那种,并不是$99/Year的那种

2、In House:是指企业内发布,仅限企业内部人员使用。

二、In-House 特点:

1、不能发布到AppleStore进行销售

2、不需要Apple评审  

3、可以使用任何一支的私有API   

4、可以安装到任何苹果设备上,无需任何签名和认证

5、用户安装只要一个ipa文件,无需证书和签名文件

三、证书的生成过程

1、生成开发和发布证书(cer 文件),和$99账号一样

2、创建App ID,和$99账号一样

3、创建开发mobileprovision文件,和$99账号一样

4、创建发布(in-house)mobileprovision文件,这个如下图和$99账号不同。AdHoc的发布方式和$99是一样的,这里我们选择的In House

5、把刚刚生成的证书和签名文件都安装后,就可以开始我们的发布了。

四、In-House打包

简单过程:Product–>Archive–>(Validate、Submit、Export) Export–>Save for Enterprise Deployment 点击Next,选择对应的企业证书后点击Export 即可成功。(Xcode 6以下ipa 和 plist 同时生成,Xcode6以上 只生成ipa,可copy之前的plist 修改即可)。 

五、企业网页服务器分发

1、按照三、四 步骤 创建ipa 和 plist ,把打包的ipa 放到服务器上,ios设备通过访问网址,即可安装

2、创建web页面 ( 注意:ios7 plist 之前的版本用http,但ios7之后必须使用https)

<!DOCTYPE html>  
    <html>  
    <head>  
      <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />   
      <title>Install Geoloqi</title>  
      <style type="text/css">  
        body {  
          background: url(bkg.png) repeat #c5ccd4;  
          font-family: Helvetica, arial, sans-serif;  
        }  
        .congrats {  
          font-size: 16pt;  
          padding: 6px;  
          text-align: center;  
        }  
        .step {  
          background: white;  
          border: 1px #ccc solid;  
          border-radius: 14px;  
          padding: 4px 10px;  
          margin: 10px 0;  
        }  
        .instructions {  
          font-size: 10pt;  
        }  
        .arrow {  
          font-size: 15pt;  
        }  
        table {  
          width: 100%;  
        }  
      </style>  
    </head>  
    <body>  
       
    <div class="congrats">点击下面图标下载 XXX-App</div>  
       
    <div class="step">  
      <table><tr>  
        <td class="instructions">安装IOS<br />XXX-App</td>  
        <td width="24" class="arrow"></td>  
        <td width="72" class="imagelink">  
          <a href="itms-services://?action=download-manifest&url=https://www.xxx.com/TestInHouse/raw/master/xxx-app.plist">  
            <img src="icon.png" height="72" width="72" />  
           </a>  
        </td>  
      </tr></table>  
<table><tr>  
        <td class="instructions">安装Android<br />作业盒子XXX-App</td>  
        <td width="24" class="arrow"></td>  
        <td width="72" class="imagelink">  
          <a href="http://www.xxx.com/xxx.apk">  
            <img src="icon.png" height="72" width="72" />  
           </a>  
        </td>  
      </tr></table>  
    </div>  
    <script>
function isWeiXin(){
var ua = window.navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i) == 'micromessenger'){
return true;
}else{
return false;
}
} 
if (isWeiXin()) {
  alert("请用浏览器打开!");
}
  </script>
    </body>  
    </html>

3、部署和测试 在手机上输入指定的网址,即可实现安装。

plist 文件如下:

plist 外站链接可选择: https://git.oschina.net,, 通过新建项目–>点+ 填入文件名–>把plist文件拷贝到内容区–>提交 即可.

遇到问题参考:

1、http://blog.csdn.net/zhaoxy_thu/article/details/17277527

2、http://stackoverflow.com/questions/20276907/enterprise-app-deployment-doesnt-work-on-ios-7-1/22767699#22767699

3、https://laoyur.com/?p=414

4、http://blog.csdn.net/zhaoxy_thu/article/details/21133399

5、http://www.2cto.com/kf/201312/264286.html

6、http://stackoverflow.com/questions/20276907/enterprise-app-deployment-doesnt-work-on-ios-7-1/22367111#22367111

7、http://www.cnblogs.com/zzy0471/p/3658572.html