- 博客(684)
- 收藏
- 关注
原创 使用gprof来对程序的性能分析总结
综述gprof用于分析函数调用耗时,可用之抓出最耗时的函数,以便优化程序。gcc链接时也一定要加-pg参数,以使程序运行结束后生成gmon.out文件,供gprof分析。gprof默认不支持多线程程序,默认不支持共享库程序。gcc -pg 编译程序运行程序,程序退出时生成 gmon.outgprof ./prog gmon.out -b 查看输出注意事项程序如果不是
2016-06-17 21:39:54 4473
原创 服务器TIME_WAIT和CLOSE_WAIT详解和解决办法
昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下:http://blog.csdn.net/shootyou/article/details/6615051里头的分析过程有提到,通过查看服务器网络状态检测到服务器有大量的CLOSE_WAIT的状态。 在服务器的日常维护过程中,会经常用到下面的命令:netstat -n | aw
2016-06-17 21:31:19 1438
原创 wait3,wait4 用法
在阅读redis代码的时候看到的一些新知识,新用法,wait3的用法。redis的用法。[cpp] view plain copy int statloc; pid_t pid; if ((pid = wait3(&statloc,WNOHANG,NULL)) != 0) {
2016-06-17 21:28:34 1898
原创 linux 下的不同函数的编程效率分享总结
操作性能memset 1K150W次/smemcpy 1K150W次/smalloc 小字节 单线程100W次/sgettimeofday30W~400W次/stime30W~400W次/sgetpid
2016-06-17 18:27:19 1059
原创 基于Web开发模式的信息抽取
基于Web 开发模式的信息抽取信息抽取是一个互联网自然语言处理的一个首要环节,信息抽取的准确度会直接影响到后续的处理。信息抽取的目标是去除噪音,获取网页有价值的信息如网页的标题、时间、正文、链接等信息。 主流算法介绍网页信息抽取的方法有很多,比如从算法上分:基于模板的,基于信息量、基于视觉的、基于语义挖掘的、基于统计的。从HTML 处理上分为:基于行块、基于DOM 树。下面
2016-06-17 18:22:36 8038 2
原创 性能测试、指标和优化 -- 性能相关总结
这篇博文主要是涉及到服务端性能,对于前端性能比较少涉及,但是最后一部分简单介绍了前端(Web页面)的测试和调优。这篇文章最早写于2012年,今天翻出来,又重新梳理了一下。哦,对了,如果对本博客中所有文章有疑问,请发邮件到lihaibo2006$gmail.com,我一般晚上就能看到。一、性能测试的类型 实际上性能是一个很很宽泛的词,系统出了问题大多归结为性能有问题,比如访问速
2016-06-17 18:18:20 860
原创 Linux下代码内存泄露检查工具valgrind
自己写的代码内存呼呼的往上涨,同事告诉我一个内存泄露检查的工具valgrind,于是就用了用。1安装sudo apt-get install valgrind也可以到官方网站去下载:http://www.valgrind.org2使用结果输出到终端,运行命令valgrind --leak-check=full --track-fds=yes 程序 参数结果输出到日志
2016-06-17 18:16:15 647
原创 推荐两篇Linux下的Socket文章
Linux SocketLinux下Socket编程HTTP 协议的简介HTTP 协议的简介 HTTP协议是一种超文本传输协议(Hypertext Transfer Protocol),工作于网络应用层,自1990年起广泛应用于WWW 的全球信息服务,HTTP协议的详细说明可以在网上查阅RFC2518、RFC2616等文档。 HTTP 协议老的标准是HTTP
2016-06-17 18:13:30 2638
原创 memset效率问题
char buff[10]初始化一个字符数组,只需要buff[0] = '\0'即可,没有必要用memset,在使用该buff时,需要注意末尾加'\0',这样性能比较好。[cpp] view plain copy#include #include "sys/time.h" void use_memse
2016-06-17 18:10:24 2400
原创 数据表水平切分的ID规则
这个问题很突出,所以转过来说一下。http://www.jianzhaoyang.com/database/sharding_groups_global_pk现在通过数据的水平切分(sharding)来实现数据库 Scale Out 的解决方案受到了越来越多人的青睐,但是在切分过程中可能遇到的问题也肯定不在少数,如切分规则的设计,切分后的访问路由,切分后的主键的全局唯一等等。
2016-06-17 18:07:28 1249
原创 c++声明/定义,静态/非静态,变量/函数
我以前也很糊涂,所以研究了一下,写了一个例子。如下 //----------------- def.h ----------------#ifndef _DEF_H_#define _DEF_H_static int a = 1;extern int b;int add();#endif //---------------- de
2016-06-17 18:06:20 1477
原创 设置正确的线程数量
《高性能服务器架构 》中提到了SEDA,我搜了一下,发现这篇文章《SEDA性能优化的分析和模拟 》,对于线程数量的建议。假如一个Web请求,代码执行的时间为ST(Service Time),读文件、网络调用之类IO等待时间为为WT(Wait Time),CPU的个数是N、核数是M则线程数量TC(Thread Count)为: TC= N*M*(1+WT/ST)
2016-06-17 17:56:15 3755
原创 代码行统计工具
统计h/c/cpp/cc/代码,Python写的,只是统计了行数,没有区分空行,注释等[python] view plain copy#! /usr/bin/python # coding=utf-8 import os,sys def getCount(dr): c = 0 for l in o
2016-06-17 17:52:27 662
原创 SecureCRT自动登陆到服务器的脚本以及脚本编写简单说明
Secure用SSH登陆服务器时,如果服务器较多,登陆一次很麻烦,所以,可以自己编写VBScript来搞定。一、Secure脚本介绍Secure是VBScript脚本,VB脚本的教程,请参考有关文档。Secure自带的对象如下:Application对象,就是crt,是个顶层的对象,所有其他内容都从这个对象中获得Session,会话对象,负责连接相关
2016-06-17 17:51:04 5580
原创 C/C++计时器检查程序性能
一般设计C/C++程序需要每秒能处理多少的数据,因此可以做一个简单的计时器来计时,代码如下:[cpp] view plain copy#ifndef _TIMER_H_ #define _TIMER_H_ #include #include using namespace std; class Timer{
2016-06-17 17:49:57 651
原创 Python发送邮件的例子
import base64, smtplib from email.mime.text import MIMEText from email.header import Header def mail_info(data, date): mailserver = "smtp.exmail.qq.com" username = "server@x
2016-06-17 17:48:41 492
原创 CPU负载的分析
最近对我的本本(4核8线程)用top命令看系统状况出现了CPU利用率超过200%的情况,非常诧异,查了下相关资料,把这个问题弄清楚了。首先来分析下CPU Loadload average: 0.09, 0.05, 0.01分别是1分钟、5分钟、15分钟的平均Load。Load这个东西怎么理解呢,就像一条马路,有N个车道,如果N个进程进入车道,那么正好一人一个,再多一
2016-06-17 17:48:13 537
原创 高性能服务器架构(High-Performance Server Architecture)
High-Performance Server Architecture高性能服务器架构来源:http://pl.atyp.us/content/tech/servers.html译文来源:http://www.lupaworld.com/home/space-341888-do-blog-id-136718.html(map注:本人看了一遍,“于我心有戚戚焉”,翻译得也很好,于是
2016-06-17 17:42:41 3506
原创 GCC 提供的原子操作总结
gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。其声明如下:type __sync_fetch_and_add (type *ptr, type value, ...)type __sync_fetch_and_sub (type *ptr, type value, ...)type __sync_fetch_and
2016-06-17 15:26:30 747
原创 pthread_create 解析
函数简介pthread_create是UNIX,linux环境创建线程函数折叠编辑本段头文件#include 折叠编辑本段函数声明int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),
2016-06-17 13:37:41 1142
原创 工作脚本处理文本shell
简单的使用shell,而且平时学习一下,如果不动手写的话,真是完全没有啥用啊,所以,代码还是写出来的。把下边的脚本代码贴出来。怕忘记了。涉及到数据库连接,awk使用,日期函数,字符串模糊匹配。[plain] view plain copy#!/bin/bash DIR_
2016-06-13 10:23:27 543
原创 POSIX---linux多线程编程基础总结
过年不回家了,一直在工作的地方呆着,就腾出了很多时间来学习了。前几天腾讯给打电话,问了linux下的一些知识,但是答得很不好。自我分析了一下,总结如下:1.知识学习一遍是远远不够的。还是要多学习,多揣摩,多思考。2.知识是要经常回头复习的。3.程序的工作是要多自己写代码实践,多思考。写出自己的东西。好,开始学习linux了。《线程》,对于一个程序员,如果不懂
2016-06-13 10:07:14 1148
原创 多线程实现消费者生产者的例子
今天看书,看了一个例子,于是自己手动的自己敲了一下。。。但是,期望的结果和理论结果是不一样的,求解答啊。。。上源代ma[cpp] view plain copy#include "apue.h" #include /* basic system data types */ #include
2016-06-12 16:39:23 540
原创 linux系统编程之fcntl使用
功能描述:根据文件描述词来操作文件的特性。#include #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);[描述]fcntl()针对(文件)描述符提供控制。参数fd
2016-06-12 16:36:02 412
原创 TCP头校验和计算算法详解
我就不管是按“位”(bit)取反相加,还是 按“1的补码”相加了,总之就是把需要进行校验的“字串”加(+)起来,把这相加的 结果取反当做“校验和” (Checksum), 比如,相加的结果是0101,那么“校验和”就是1010,验证的时候呢,就是 0101+1010 = 1111 ,取反后, 就是0——如果验证得“零”(0),就是正确的!先将checksum字段置零,然
2016-06-12 16:32:15 3373
原创 linux的进程与线程
在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么,只是维护应用程序所需的各种资源。而线程则是真正的执行实体,为了让进程完成一定的工作,进程必须至少包含一个线程。进程所维护的是程序所包含的资源(静态资源),如:地址空间,打开的文件句柄集,文件系统状态,信号处理handler等。线程所维护的是运行相关的资源(动态资源),如:运行栈,调度相关的控制信息,待处理的信号集等。
2016-06-12 16:29:32 1733
原创 getaddrinfo()函数详解
getaddrinfo()函数详解 1. 概述IPv4中使用gethostbyname()函数完成主机名到地址解析,这个函数仅仅支持IPv4,且不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间。IPv6中引入了getaddrinfo()的新API,它是协议无关的,既可用于IPv4也可用于IPv6。getaddrinfo函数能够处理名字到地址以
2016-06-12 16:09:58 779
原创 网络编程之非阻塞socket的连接
补充关于select在异步(非阻塞)connect中的应用,刚开始搞socket编程的时候 我一直都用阻塞式的connect,非阻塞connect的问题是由于当时搞proxy scan 而提出的呵呵 通过在网上与网友们的交流及查找相关FAQ,总算知道了怎么解决这一问题.同样 用select可以很好地解决这一问题.大致过程是这样的: 1.将打开的so
2016-06-12 16:05:07 631
原创 memcached源码阅读----使用libevent和多线程模型
一、libevent的使用 首先我们知道,memcached是使用了iblievet作为网络框架的,而iblievet又是单线程模型的基于linux下epoll事件的异步模型。因此,其基本的思想就是 对可读,可写,超时,出错等事件进行绑定函数,等有其事件发生,对其绑定函数回调。 可以减掉了解一下 libevent基本api调用[cpp]
2016-06-12 16:02:21 1815
原创 FastDFS源码分析之tracker协议分析
本篇博客主要讲解fastdfs中tracker协议的讲解。fastdfs主要是存储文件,直接把整个文件存储到磁盘上,所以,简单直接。但是也有很大的局限性。因此,fastdfs对文件的目录设置和存储是最为核心的。为什么这么突然的讲解这些。因为我已经看了一段时间的fastdfs,主要结构都已经搞的比较清晰了。因此,这篇文章,我就主要一tracker这一部分的协议来分
2016-06-12 16:00:17 2558
原创 服务端架构中的“网关服务器”
这么一个场景:一个要承载高并发、具有高性能的后台服务,往往会有多个不同的应用服务。问题来了,你会怎样设计架构呢?如下图所示,为了共用一个稳定高效的网络处理功能,把所有服务写在一个进程里。接下来悲剧一幕幕就要上演了,如果各个模块是多人协作开发,网络库的作者得想办法设计个插件机制供各个应用挂载,开发时无论是人员或者代码都耦合非常严重,大大影响协作、开发效率,后期要增减一个应
2016-06-12 15:57:17 1794
原创 高并发Web服务的演变——节约系统内存和CPU
一、越来越多的并发连接数现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战。以最简单粗暴的方式解决,就是增加Web系统的机器和升级硬件配置。虽然现在的硬件越来越便宜,但是一味地通过增加机器来解决并发量的增长,成本是非常高昂的。结合技术优化方案,才是更有效的解决方法。并发连接数为什么呈指数增长?实际上,从这几年的用户基数上看,这个数
2016-06-12 15:45:46 2336
原创 redis源码解析----epoll的使用
平时做项目,涉及到网络层的都是epoll,前几年发现redis的epoll实现起来非常的精简,好用。因为提供的接口简单,爱并实现的很高效。于是,我就提取出来,直接使用。今天又打开该文件详细的看看他的实现细节。首先简单介绍epoll,它是linux内核下的一个高效的处理大批量的文件操作符的一个实现。不仅限于socket fd。他在超时时间内会唤醒有事件的操作符。其中有两种模式
2016-06-12 15:41:53 446
原创 我的c++服务器记录----非阻塞下的socket读取操作
服务器端的基本的一个操作就是从socket的fd上进行数据读取,也就是我们经常用到的read函数。 欢迎关注我的服务器代码:http://code.taobao.org/p/fastServer/src/今天主要是关注的正确的进行read操作 首相,我的socket是已经设置了非阻塞属性。read函数在非阻塞读取fd的时候会遇到不同的errno。 如何正确的处理这些erron 状态
2016-06-12 15:35:20 851
原创 linux中内存使用,swap,cache,buffer的含义总结
首先介绍一下linux中内存是如何使用的。当有应用需要读写磁盘数据时,由系统把相关数据从磁盘读取到内存,如果物理内存不够,则把内存中的部分数据导入到磁盘,从而把磁盘的部分空间当作虚拟内存来使用,也称为Swap。如果给所有应用分配足够内存后,物理内存还有剩余,linux会尽量再利用这些空闲内存,以提高整体I/O效率,其方法是把这部分剩余内存再划分为cache及buffer两部分加以利用。从磁
2016-06-11 22:18:48 1184
原创 GCC参数详解
gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 2.将预处理后的文件不转换成汇编语言,生成文件.s 3.有汇编变为目标代码(机器代码)生成.o的文件 4.连接目标代码,生成可执行程序 [参数详解] -c 只激活预处理,编译,和汇编,也就是他只把程序做成obj
2016-06-11 21:55:12 347
原创 Twitter-Snowflake,64位自增ID算法详解
Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同。Snowflake算法核心把时间戳,工作机器id,序列号组合在一起。 除了最高位bit标记为不可用以外,其余三组bit占
2016-06-11 21:50:50 831
原创 linux 系统调用sysconf函数使用
在看开源代码的时候,尤其是获取cpu核数的时候,发现了一个很好用的一个函数[cpp] view plain copy#include long sysconf(int name); 通过名字可以猜到,该函数是获取一些系统的参数。然后通过man sysconf我们可以知道该函数的使用
2016-06-11 21:48:11 516
原创 原子操作的一段代码学到的知识
本实例是我在学习原子操作看到一段很有趣的程序,包含的知识很多。首先上程序:[cpp] view plain copy// test_atomic.cpp : 定义控制台应用程序的入口点。 // #define _GNU_SOURCE #include #include #include
2016-06-11 21:44:07 538
原创 C语言实现分布式自增有序的唯一ID生成算法-snowflake算法
之前有人问我设计一个分布式的递增的唯一id生成。想了半天不知道,偶然一个同事说起snowflake算法,我百度了一下,很简单高效。参考https://github.com/twitter/snowflake于是,我自己用c语言随便实现了一下,还没有达到工业级别,需要细化,但是基本能用了,上代码。[cpp] view plain copy
2016-06-11 21:27:29 3336
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人