调汁

Publish: May 23, 2013 Category: 美食 10 Comments

凉菜类:蒜汁、蒜泥汁:
素菜用---蒜汁(基础汁):

作法:
      4+N:(盐、味精、糖、酱油)+(蒜蓉/辣椒)
        酱油1 + 米醋4 + 蒜沫2 + 香油3 + 胡椒粉3 + 味精 + 糖

使用:
      排黄瓜、大拌菜、呛腐竹、呛芹菜等。。。

阅读剩余部分...

ps - 按进程消耗内存多少排序

Publish: May 17, 2013 Category: Shell 43 Comments

ps -eo rss,pmem,pcpu,vsize,args |  sort -k 1 -r -n | less

ps 都知道,是linux,unix显示进程信息的, -e 是显示所有进程, -o是定制显示信息的格式
rss: resident set size, 表示进程占用RAM(内存)的大小,单位是KB
pmem: %M, 占用内存的百分比
pcpu:%C,占用cpu的百分比
vsize: 表示进程占用的虚拟内存的大小,KB
args:进程名(command)

sort命令对ps结果进行排序
-k 1 :按第一个参数 rss进行排序
-r:逆序
-n:numeric,按数字来排序

GDB常用指令说明

Publish: May 17, 2013 Category: Shell,C/C++ 11 Comments

gdb启动方式:

# 1. program 就是你的执行文件
gdb <program>    
# 2. 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件
# 有以下两种方式:
a. gdb <program> <core file>
b. gdb <program> -c <core file>
# 3. 如果程序是个服务程序,那么可以指定这个服务进程的pid
# 有以下两种方式
a. gdb <program> <pid>
b. gdb -p <pid>

子进程调试:

set follow-fork-mode child
#例子:
# gdb ./server
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-75.el6)
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /data1/test/server...done.
(gdb) set follow-fork-mode child 
(gdb) b command.c:1877
(gdb) r -c conf.ini

多线程调试:

info thread : 查看当前进程的线程。
thread <ID> : 切换调试的线程为指定ID的线程。
b file.c:100 thread all : 在file.c文件第100行处为所有经过这里的线程设置断点。
set scheduler-locking off|on|step : 这个是问得最多的。在使用step或者continue命令调试当前被调试线程的时候,其他线程也是同时执行的,怎么只让被调试程序执行呢?通过这个命令就可以实现这个需求。
    off : 不锁定任何线程,也就是所有线程都执行,这是默认值。
    on  : 只有当前被调试程序会执行。
    step: 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。


start - 开始调试,并且自动在main开始处中断(break)
b [函数名] - 在指定函数处设置断点
b [文件名]:[行数] - 在指定文件的行数处设置断点
b [文件名]:[函数名] - 在指定文件的函数处设置断点
s - 执行下一步语句,如果有函数就跳进去继续执行
n - 执行下一步语句,不会跳入函数
i b - 查看已经设置的断点(break)
en b [断点编号] - 启用断点
d b - 删除所有断点
d b [断点编号] - 删除指定编号
c - 继续运行直到断点
until - 跳出循环
finish - 继续运行直到函数返回
frame - 查看当前的运行到的位置
dis [变量名] - 监控指定变量值,每次执行s,n或者c之后会显示
dis [函数名]::[变量名] -监控指定函数的变量,对于当前位于某函数内需要监控全局变量很有用
i dis - 显示监控信息,添加了监控变量多少个,每个是什么
en dis [监控编号] - 如果监控变量是未赋值的,会自动disable掉这个监控,使用en把监控重新打开
d d - 删除所有监控
d d [监控编号] - 删除指定监控
q - 退出gdb
set follow-fork-mode [parent/child] - child为fork产生时跳入子进程,parent为继续监控主进程
set detach-on-fork [on/off] - 当跳入子进程的时候,on为主进程继续运行,off为暂停主进程的执行





如何使用Shell缉拿问题进程

Publish: May 14, 2013 Category: Shell No Comments

实际上解决问题的思路非常简单:通过CRON每分钟运行一个Shell,查询系统负载,一旦发现异常,就通过「ps」命令保存进程快照,也可以进一步保存负载,内存等相关的数据,但通常没有必要,因为通过「sar」命令很容易拿到。相关Shell代码如下:

#/bin/bash

LOAD=$(awk '{print $1}' /proc/loadavg)
CPUNUM=$(grep -c processor /proc/cpuinfo)

if [ $(echo "$LOAD > $CPUNUM" | bc) = 1 ]; then
    RESULT=$(ps -eo pcpu,pmem,user,args | awk '$1 > 0' | sort -nr)
    if [ -n "$RESULT" ]; then
        echo "$RESULT" > /var/log/ps.$(date +"%Y%m%d%H%M")
    fi
fi


实际使用时需要注意的地方:首先,要避免日志文件塞满硬盘;其次,因为是通过CRON来执行的,所以可能会漏判,如果强调准确性请自行改写为守护进程方式。

IMG标识直接显示图片文件的二进制内容

Publish: May 10, 2013 Category: 默认分类 20 Comments

<img src="data:image/png;base64,iVBORw0KGgoAAAANS..." />

php使用方法:

<?php
$img = file_get_contents("./abc.jpg");
$img_b64 = base64_encode($img);

echo "<img src='data:image/jpg;base64,{$img_b64}' />"

?>