﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-曲径通幽-随笔分类-Linux Generic</title><link>http://www.cppblog.com/chinloon/category/14728.html</link><description>programming_with_fun();</description><language>zh-cn</language><lastBuildDate>Mon, 11 Jun 2012 08:25:42 GMT</lastBuildDate><pubDate>Mon, 11 Jun 2012 08:25:42 GMT</pubDate><ttl>60</ttl><item><title>再遇 SQLITE_BUSY</title><link>http://www.cppblog.com/chinloon/archive/2012/06/06/177803.html</link><dc:creator>Meiosis</dc:creator><author>Meiosis</author><pubDate>Wed, 06 Jun 2012 08:35:00 GMT</pubDate><guid>http://www.cppblog.com/chinloon/archive/2012/06/06/177803.html</guid><wfw:comment>http://www.cppblog.com/chinloon/comments/177803.html</wfw:comment><comments>http://www.cppblog.com/chinloon/archive/2012/06/06/177803.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chinloon/comments/commentRss/177803.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinloon/services/trackbacks/177803.html</trackback:ping><description><![CDATA[记得以前解决过这个问题，现在帮助同事查BUG的时候，再次遇到，记录一下省的下次再苦苦回忆。<br />遇到这个问题，一般而言是3种情况造成：<br />1) 其他线程、进程正在执行一次写操作<br />&nbsp; &nbsp; 根据SQLITE文档，所有写操作(当然SELECT不算写操作)，SQLITE内部都会自动添加事务，这样在线程同时写有依赖关系的表的时候，自然会发生冲突<br />2) 当前SQLITE被&#8220;BEGIN TRANSACTION&#8221; lock住了，这个问题其实包含了1)中的隐形调用，另外别忘了自己的代码一定要在执行完BEGIN 后 COMMIT<br />3) 有statement对象未finalize，且未reset(出错时)<br />&nbsp; &nbsp; 这个情况占多数，我项目中遇到两次都是这个情况，<br /><div style="text-align: justify;">&nbsp; &nbsp; 当然，要注意即使自己未直接调用 prepare-step-finalize，在某些API执行的时候会隐式调用(比如sqlite3_exec)，当然这种情况一般会归在1)里</div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div style="text-align: justify;">&nbsp;&nbsp;&nbsp;</div></blockquote><img src ="http://www.cppblog.com/chinloon/aggbug/177803.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinloon/" target="_blank">Meiosis</a> 2012-06-06 16:35 <a href="http://www.cppblog.com/chinloon/archive/2012/06/06/177803.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux ssh 任务的断开与重连</title><link>http://www.cppblog.com/chinloon/archive/2012/04/27/172868.html</link><dc:creator>Meiosis</dc:creator><author>Meiosis</author><pubDate>Thu, 26 Apr 2012 16:17:00 GMT</pubDate><guid>http://www.cppblog.com/chinloon/archive/2012/04/27/172868.html</guid><wfw:comment>http://www.cppblog.com/chinloon/comments/172868.html</wfw:comment><comments>http://www.cppblog.com/chinloon/archive/2012/04/27/172868.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chinloon/comments/commentRss/172868.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinloon/services/trackbacks/172868.html</trackback:ping><description><![CDATA[直接用自带的 screen 即可解决，screen 中执行的任务 c-a d 之后会把任务切后台，<br />重新SSH上去之后，screen -ls 找到ID，直接 screen -r [id]<br /><br /><span style="color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; ">C-a ? 显示所有键绑定信息</span><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; " /><span style="color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; ">C-a w 显示所有窗口列表</span><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; " /><span style="color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; ">C-a C-a 切换到之前显示的窗口</span><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; " /><span style="color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; ">C-a c 创建一个新的运行shell的窗口并切换到该窗口</span><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; " /><span style="color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; ">C-a n 切换到下一个窗口</span><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; " /><span style="color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; ">C-a p 切换到前一个窗口(与C-a n相对)</span><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; " /><span style="color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; ">C-a 0..9 切换到窗口0..9</span><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; " /><span style="color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; ">C-a a 发送 C-a到当前窗口</span><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; " /><span style="color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; ">C-a d 暂时断开screen会话</span><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; " /><span style="color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; ">C-a k 杀掉当前窗口</span><br style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; " /><span style="color: #383838; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; text-align: left; ">C-a [ 进入拷贝/回滚模式</span><img src ="http://www.cppblog.com/chinloon/aggbug/172868.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinloon/" target="_blank">Meiosis</a> 2012-04-27 00:17 <a href="http://www.cppblog.com/chinloon/archive/2012/04/27/172868.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于 SQLite 优化</title><link>http://www.cppblog.com/chinloon/archive/2012/01/19/164380.html</link><dc:creator>Meiosis</dc:creator><author>Meiosis</author><pubDate>Thu, 19 Jan 2012 09:58:00 GMT</pubDate><guid>http://www.cppblog.com/chinloon/archive/2012/01/19/164380.html</guid><wfw:comment>http://www.cppblog.com/chinloon/comments/164380.html</wfw:comment><comments>http://www.cppblog.com/chinloon/archive/2012/01/19/164380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chinloon/comments/commentRss/164380.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinloon/services/trackbacks/164380.html</trackback:ping><description><![CDATA[项目里遇到一个问题，在我们程序客户端运行时，sqlite数据库会不断自动生成/删除 journal 文件，高峰时候会占用大量的IO，导致程序很慢。<br />由于客户端本身的数据完整性不重要，性能非常重要，所以想禁止这个文件的生成。<br />后来查了一下文档，并实践过后，发现网络上所有的关于关闭/打开某些宏来防止生成的方法都不管用。情急之下，只有改源码了。<br />改的地方是在main.c 的&nbsp;sqlite3BtreeFactory 里，直接加个宏就好了&nbsp;omitJournal<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; "><strong>&nbsp;</strong>1</span>&nbsp;<span style="color: #0000ff; ">int</span>&nbsp;<span style="color: #000000; ">sqlite3BtreeFactory(</span><br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; ">const</span>&nbsp;<span style="color: #000000; ">sqlite3&nbsp;*db,</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Main&nbsp;database&nbsp;when&nbsp;opening&nbsp;aux&nbsp;otherwise&nbsp;0&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;3</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; ">const</span>&nbsp;<span style="color: #0000ff; ">char</span>&nbsp;<span style="color: #000000; ">*zFilename</span>,&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Name&nbsp;of&nbsp;the&nbsp;file&nbsp;containing&nbsp;the&nbsp;BTree&nbsp;database&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; ">int</span>&nbsp;<span style="color: #000000; ">omitJournal</span><span style="color: #000000; ">,&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;if&nbsp;TRUE&nbsp;then&nbsp;do&nbsp;not&nbsp;journal&nbsp;this&nbsp;file&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; ">int</span>&nbsp;<span style="color: #000000; ">nCache,</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;How&nbsp;many&nbsp;pages&nbsp;in&nbsp;the&nbsp;page&nbsp;cache&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; ">int</span>&nbsp;<span style="color: #000000; ">vfsFlags,</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Flags&nbsp;passed&nbsp;through&nbsp;to&nbsp;vfsOpen&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;<span style="color: #000000; ">Btree&nbsp;**ppBtree&nbsp;</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">&nbsp;Pointer&nbsp;to&nbsp;new&nbsp;Btree&nbsp;object&nbsp;written&nbsp;here&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">){</span><br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; ">int</span>&nbsp;<span style="color: #000000; ">btFlags&nbsp;=&nbsp;0;</span><br /><span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; ">int</span>&nbsp;<span style="color: #000000; ">rc;</span><br /><span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;<span style="color: #000000; ">assert(&nbsp;sqlite3_mutex_held(db-&gt;mutex)&nbsp;);</span><br /><span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;<span style="color: #000000; ">assert(&nbsp;ppBtree&nbsp;!=&nbsp;0);</span><br /><span style="color: #008080; ">14</span>&nbsp;<br /><span style="color: #008080; ">15</span>&nbsp;<span style="color: #0000ff; ">#ifdef&nbsp;OMIT_JOURNAL</span><br /><span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;<span style="color: #000000; ">omitJournal&nbsp;=&nbsp;1;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">!&lt;&nbsp;turn&nbsp;off&nbsp;journal&nbsp;file</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000ff; ">#endif</span></div><hr /><img src ="http://www.cppblog.com/chinloon/aggbug/164380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinloon/" target="_blank">Meiosis</a> 2012-01-19 17:58 <a href="http://www.cppblog.com/chinloon/archive/2012/01/19/164380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>研究了一天ZeroMQ，有个严重的问题还没解决</title><link>http://www.cppblog.com/chinloon/archive/2011/06/14/148641.html</link><dc:creator>Meiosis</dc:creator><author>Meiosis</author><pubDate>Tue, 14 Jun 2011 08:59:00 GMT</pubDate><guid>http://www.cppblog.com/chinloon/archive/2011/06/14/148641.html</guid><wfw:comment>http://www.cppblog.com/chinloon/comments/148641.html</wfw:comment><comments>http://www.cppblog.com/chinloon/archive/2011/06/14/148641.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/chinloon/comments/commentRss/148641.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinloon/services/trackbacks/148641.html</trackback:ping><description><![CDATA[&nbsp; ZeroMQ是一个Message Queue的实现方案，支持超多种语言的Binding，今天研究了一下，起初对它的N:N模型很感兴趣，后来试用了其自带的 Load Balance特性，结果发现一个非常严重的问题，在Server Cluster中，如果有一台服务器在接收消息后Blocking，或者服务器崩溃了，没来得及send response，则客户端的请求一直就停留在这次send req上，永远无法检测出error，我查了关于timeout的文档，后来改用poll模型试了很久，还是没法解决。接下来可能要花时间仔细研读一下Guide了。<img src ="http://www.cppblog.com/chinloon/aggbug/148641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinloon/" target="_blank">Meiosis</a> 2011-06-14 16:59 <a href="http://www.cppblog.com/chinloon/archive/2011/06/14/148641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux下调试死循环</title><link>http://www.cppblog.com/chinloon/archive/2011/06/13/148580.html</link><dc:creator>Meiosis</dc:creator><author>Meiosis</author><pubDate>Mon, 13 Jun 2011 05:49:00 GMT</pubDate><guid>http://www.cppblog.com/chinloon/archive/2011/06/13/148580.html</guid><wfw:comment>http://www.cppblog.com/chinloon/comments/148580.html</wfw:comment><comments>http://www.cppblog.com/chinloon/archive/2011/06/13/148580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/chinloon/comments/commentRss/148580.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/chinloon/services/trackbacks/148580.html</trackback:ping><description><![CDATA[&nbsp; 最近在工作中发现网络通信收发文件部分，发送一次文件后，就再也不能发第二次了。本以为是协议的问题，后来用TOP发现CPU过高，才通过GDB看到了是一个清空Buffer类的代码有BUG，计算无符号整形的操作溢出了。<br />&nbsp; 具体跟踪方法记录一下。首先正常启动程序，然后进行收发文件操作，触发死循环。而后通过 top -H 查看哪个线程(其实是PID，redhat的线程是fork进程实现的)占用CPU过高，而后gdb -p [pid] attach 之，最后bt 打印堆栈。<img src ="http://www.cppblog.com/chinloon/aggbug/148580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/chinloon/" target="_blank">Meiosis</a> 2011-06-13 13:49 <a href="http://www.cppblog.com/chinloon/archive/2011/06/13/148580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>