- 博客(170)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
转载 使用strace工具故障排查的5种简单方法
使用strace工具故障排查的5种简单方法本文源自5 simple ways to troubleshoot using stracestrace 是一个非常简单的工具,用来跟踪可执行程序的系统调用(system call)。最简单的使用是,它追踪可行程序运行时的整个生命周期,输出每一个系统调用的名字,参数和返回值。但是它还可以做更多的事情:它可以基于系统调用或者系统调用组来过滤 它可以通过计算制定系统调用的次数,花费的时间以及成功和失败的次数来描述系统调用的使用 它可以追踪发送给进程..
2020-05-11 10:13:20 796 1
转载 zookeeper用途
顾名思义zookeeper就是动物园管理员,他是用来管hadoop(大象)、Hive(蜜蜂)、pig(小猪)的管理员,ApacheHbase和ApacheSolr的分布式集群都用到了zookeeper;Zookeeper:是一个分布式的、开源的程序协调服务,是hadoop项目下的一个子项目。 一、zookeeper主要功能如下: 1、配置管理 在我们的应用中除了代码外,...
2020-02-16 22:08:09 620
转载 Zookeeper实现分布式锁
实现分布式锁目前有三种流行方案,分别为基于数据库、Redis、Zookeeper的方案,其中前两种方案网络上有很多资料可以参考,本文不做展开。我们来看下使用Zookeeper如何实现分布式锁。什么是Zookeeper?Zookeeper(业界简称zk)是一种提供配置管理、分布式协同以及命名的中心化服务,这些提供的功能都是分布式系统中非常底层且必不可少的基本功能,但是如果自己实现这些功能而且...
2020-01-13 11:36:45 369
转载 Zookeeper常用操作命令create,set,delete
一、zk特性的session的基本原理1、客户端与服务端之间的连接存在会话2、每个会话都可以设置一个超时时间3、心跳结束,session则过期4、session过期,则临时节点znode会被抛弃5、心跳机制: 客户端想服务端的ping包请求二、create命令create /larry larry-data 值为larry-data[zk: localh...
2020-01-13 11:16:10 5313
转载 Zookeeper实现分布式锁
今天偶然在头条上看见一个基于Zk的分布式锁的推荐,觉得讲的不错,想起来自己在分析分布式锁的时候对于Zookeeper锁的分析没有完善。所以今天来补一篇。分布式锁Zookeeper的节点类型1. 持久节点节点创建后就会一直存在,直到主动删除,不会因为创建改节点的客户端会话消失而消失。2.持久顺序节点持久的,顺序节点,Zk会维护这个时序,记录子节点的创建的先后顺序。3.临时节点...
2020-01-12 17:19:41 202
转载 linux安装jdk环境(多种方式)
linux系统通用安装通过tar.gz压缩包安装此方法适用于绝大部分的linux系统下载tar.gz的压缩包,这里使用官网下载。进入:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html勾选接受许可协议后选择对应的压缩包,下载完成后上传的linux服务器上,这里是上传到...
2020-01-12 14:16:42 201
转载 在一台虚拟机上做zookeeper集群
1. ZookeeperZooKeeper 是一个开源的分布式协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。1.1 zookeeper的由来Zookeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式...
2020-01-12 14:00:37 339
转载 字节对齐的规则总结
一、什么是字节对齐,为什么要对齐?现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地...
2019-10-18 10:57:40 457
转载 linux文件锁之单例进程
锁的合并:若不同进程需要设置的两把锁作用范围部分或全部重叠,则先设置的读锁阻止后来设置的;先设置的写锁阻止后来的读/写锁.若同一进程先后要求设置的两把锁 (A,B)的作用范围部分或全部重叠,则在两把锁同类的情况下,它们的作用范围合并成一把锁(AUB);若两把锁不同类,则后设置的锁覆盖先设置的锁,先 设置的锁的范围变成(AUB) - B.锁的互斥,合并及覆盖与是建议性还是强制型锁无关.#inc...
2019-03-27 11:33:37 590
原创 shell脚本关闭指定程序
假设tesh.sh为需要关闭的程序名称#!/bin/bashtmp=`ps -ef | grep test.sh| grep -v grep | awk '{print $2}'`echo ${tmp}kill -9 ${tmp}
2018-08-29 17:58:27 4307
原创 shell监控程序内存以及程序运行状态并写入日志
KVDBDataBaseImsiRegister为监控程序的名称LOG_NAME为日志文件名称#!/bin/bashLOG_PREFIX="../log/KVDBDataBaseImsiRegister_"DATE_TIME=`date +%Y%m%d`LOG_SUFFIX=".log"LOG_NAME=${LOG_PREFIX}${DATE_TIME}${LOG_SUFFIX}...
2018-08-29 17:54:23 1648
转载 宏定义中使用do{}while(0)的好处 (转载)
#define MACRO_NAME(para) do{macro content}while(0) 的格式,总结了以下几个原因: 1,空的宏定义避免warning:#define foo() do{}while(0)2,存在一个独立的block,可以用来进行变量定义,进行比较复杂的实现。3,如果出现在判断语句过后的宏,这样可以保证作为一个整体来是实现: #...
2018-08-22 10:26:27 612
转载 AWK 输出重复的行 去掉重复的行
AWK是一个非常强大的文本处理工具。今天尝试着去掉文件中的重复的行, 开始采用了“cat filename | sort -u" 命令, 但是这个命令有很大的缺点,改变了原来行的顺序。 用diff命令,很难查看到文件的差别。 偶然看到一个兄弟写的一个很简单的AWK命令,既能不改变原文本行的相对顺序,并且能够输出/去掉重复的行,而且命令非常简单。 awk 'a[$0]++' fi...
2018-08-20 17:43:29 2804
转载 STL set的用法(获取插入结果)
要使用set需要事先引入一个头文件 #include<set>set是一个不允许重复的集合,如果要重复可以使用multiset。 1.set的插入【set.insert();】,会返回Pair<iterator,bool>对象,前一个是插入的位置,后一个是是否插入成功。 #include<cstdio> #i...
2018-08-10 10:04:41 2160
转载 Linux中FTP服务器的搭建教程
一、查看是否安装有ftp相关的安装包# rpm -qa | grep vsftpd //ftp的安装包就是vsftpd查看到我的系统中没有安装相关的包,所以先把安装包装上。# yum -y install vsftpd //这里如果没有配置yum源,可以直接用rpm的方式安装也是一样的查看一下是否安装成功二、启动服务并设置开机自启动# service vsftp...
2018-07-31 15:55:37 1594
转载 linux设置线程属性函数总结
1、初始化一个线程对象的属性int pthread_attr_init(pthread_attr_t *attr); 返回值:若是成功返回0,否则返回错误的编号 形 参: attr 指向一个线程属性的指针 说 明:Posix线程中的线程属性pthread_attr_t主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先...
2018-07-13 18:42:51 1203
转载 文件锁和记录锁
http://blog.chinaunix.net/uid-23634108-id-2393492.html 下面介绍两种两种Linux下对文件加锁的两种方式一、文件锁思想:假设有一个文件A。创建一个加锁文件B,通过不同的进程互斥的访问此加锁文件B达到互斥的访问文件A的目的。源码如下#include "stdio.h"#include <time.h>#include <sys/...
2018-07-13 10:21:55 2442
转载 守护进程之单实例
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <signal.h>#include <unistd.h>#include <sys/types.h>#include <time.h>#include <sys/stat
2018-07-13 10:13:41 406
转载 守护进程编写实例
守护进程如果一个进程永远都是以后台方式启动,并且不能受到Shell退出影响而退出,一个正统的做法是将其创建为守护进程。守护进程值得是系统长期运行的后台进程,类似Windows服务。守护进程信息通过ps –a无法查看到,需要用到–x参数,当使用这条命令的时候,往往还附上-j参数以查看作业控制信息,其中TPGID一栏为-1就是守护进程创建守护进程最关键的一步是调用setsid函数创建一个新的Sessi...
2018-07-13 09:31:00 584
转载 ps -aux命令
运行 ps aux 的到如下信息:root:# ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDsmmsp 3521 0.0 0.7 6556 1616 ? Ss 20:40 0:00 sendma...
2018-07-13 09:27:17 486
转载 linux线程私有数据函数(pthread_key_create )
最近做的一个项目中,有这么个需求,系统中使用多线程技术,每个线程访问redis,希望每个线程来保存对redis的一份长链接,而不是每个请求建立一次链接。如果在线程启动之前建立好链接,然后传到线程的私有数据中,可以实现。可是系统的框架封装的实现,无法传入数据,这时可以采用线程的私有数据技术进行储存和获取。其中,有三个关键的系统API可供调用,分别是:1、pthread_key_create ,创建一...
2018-07-10 18:24:48 852
转载 linux之errno与线程安全
在linux或者unix环境中,errno是一个十分重要的部分。在调用的函数出现问题的时候,我们可以通过errno的值来确定出错的原因,这就会 涉及到一个问题,那就是如何保证errno在多线程或者进程中安全?我们希望在多线程或者进程中,每个线程或者进程都拥有自己独立和唯一的一个 errno,这样就能够保证不会有竞争条件的出现。一般而言,编译器会自动保证errno的安全性,但是为了妥善期间,我们希望...
2018-07-10 14:18:09 1694
转载 进程通信--mmap内存共享
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列...
2018-07-10 11:41:36 367
转载 多线程中使用信号机制 pthread_sigmask()
在Linux的多线程中使用信号机制,与在进程中使用信号机制有着根本的区别,可以说是完全不同。在进程环境中,对信号的处理是,先注册信号处理函数,当信号异步发生时,调用处理函数来处理信号。它完全是异步的(我们完全不知到信号会在进程的那个执行点到来!)。然而信号处理函数的实现,有着许多的限制;比如有一些函数不能在信号处理函数中调用;再比如一些函数read、recv等调用时会被异步的信号给中断(inter...
2018-07-09 16:50:44 666
转载 Linux进程栈和线程栈
参考资料:http://blog.csdn.net/xhhjin/article/details/7579145总结: 1、进程的栈大小是在进程执行的时刻才能指定的,即不是在编译的时候决定的,也不是在链接的时候决定的 2、进程的栈大小是随机确定的至少比线程栈要大,但是不到线程栈大小的2倍 3、线程栈大小是固定的,也就是ulimit -a 显示的值 查看线程栈大小:可以看到默认情况...
2018-07-06 12:38:41 336
转载 线程分离状态的理解
在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放。 线程的分离状态决定一个线程以什么样的方式来终止自己。在默认情况下线程是非分离状态的,这种情况下,原有...
2018-07-06 09:29:57 1360
转载 _exit和exit的区别
在linux的标准库函数中,有一套称作高级I/O的函数,我们熟知的printf 、fopen 、fread 、fwrite都在此列,他们也被称作缓冲I/O。其特征是对应每一个打开的文件,都存在一个缓冲区, 在内存中都有一片缓冲区,每次读文件会多读若干条记录,这样下次读文件时就可以直接从内存的缓存中取出,每次写文件时也仅仅是写入到内存的缓冲区,等待满足一定的条件(达到一定的数量,或者遇到特定字符,如...
2018-07-05 11:59:17 306
转载 fork与vfork的区别(注:vfork子进程不能return)
1.vfork保证子进程先运行,在它调用exec或exit之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。2.fork要拷贝父进程的进程环境;而vfork则不需要完全拷贝父进程的进程环境,在子进程没有调用exec和exit之前,子进程与父进程共享进程环境,相当于线程的概念,此时父进程阻塞等待。 为什么会有vfork呢?因为以前的fork当它创建一个...
2018-07-05 11:40:54 758
转载 linux父子进程文件共享
这种共享的方式使父、子进程对同一个文件使用了同一个文件偏移量。如果父、子进程写到同一个文件描述符,但有没有任何形式的同步,那么它们的输出就会相互混合。在fork之后处理文件描述符有两种常见的情况:(1)父进程等待子进程完成。在这种情况下,父进程无须对其描述符做任何处理。当子进程终止之后,它曾进行过读、写的人一个共享描述符的文件偏移量已经执行了相应的更新。(2)父、子进程各自执行不同的程序段。这种情...
2018-07-05 11:22:22 539
转载 linux write函数为原子操作,多进程,多线程假如APPEND,写入不被打断
当一个文件被多个进程或者多个线程同时操作时,会不会出现内容交错的现象。例如一个进程向文件写入“AAAA” ,使用语句(write( fd, "AAAA", 4);),另一个进程向文件写入“BBBB”,语句为(write ( fd, "BBBB", 4);)。那么最终文件的内容会不会出现“AABBBBAA” 的情况呢?这就涉及到write函数是否是原子操作的问题了。如果write函数是原子操...
2018-07-05 11:16:41 3235
转载 父子进程间文件共享
fork函数调用一次,返回两次。在新创建的过程中返回一次,返回值为0.在原来的进程中返回一次,返回值是新进程的pid。 通过fork函数创建的进程为新进程的父进程。即就是,通过fork创建的进程与原进程是父子关系。孤儿进程:当父进程结束以后,子进程未结束,子进程的父进程变为init。init这个进程是守护进程,它负责处理这些孤儿进程退出以后的一些状态。 僵死进程:(1)父进程未结束,子进程结束,父...
2018-07-05 10:52:27 810
转载 信号驱动IO之libevent的使用
5、libevent方法 libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。 l...
2018-07-05 10:17:40 793
转载 Linux系统环境下关于多进程并发写同一个文件的讨论
原文地址:Linux系统环境下关于多进程并发写同一个文件的讨论 作者:CUKdd讨论关于并发环境下,多个进程对同一文件写入的问题,我们会涉及到文件共享的知识。在开始之前,我们先讨论一些有关文件共享的知识。1. 文件共享 Unix系统支持在不同进程间共享打开的文件。为此,我们先介绍一下内核用于所有I/O的数据结构。注意,下面的说明是概念性的,与特定的实现可能匹配,也可能不匹配。 内核使用三种数据...
2018-07-05 10:14:28 1854
转载 linux网络编程IO模型
构建现代的服务器应用程序需要以某种方法同时接收数百、数千甚至数万个事件,无论它们是内部请求还是网络连接,都要有效地处理它们的操作。 有许多解决方案,但事件驱动也被广泛应用到网络编程中。并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。 ...
2018-07-05 10:07:06 375
转载 epoll和select区别
先说下本文框架,先是问题引出,然后概括两个机制的区别和联系,最后介绍每个接口的用法一、问题引出 联系区别问题的引出,当需要读两个以上的I/O的时候,如果使用阻塞式的I/O,那么可能长时间的阻塞在一个描述符上面,另外的描述符虽然有数据但是不能读出来,这样实时性不能满足要求,大概的解决方案有以下几种:1.使用多进程或者多线程,但是这种方法会造成程序的复杂,而且对与进程与线程的创建维护也需要很多的开销。...
2018-06-28 09:52:42 434
转载 linux C++ 面向对象线程类封装
1.封装遇到的问题将pthread线程封装为抽象类,这样用户在使用线程时,只需要继承一下这个抽象类,并实现相应的接口就可以了。这样做的好处是用户可以将注意力集中在线程所要执行的逻辑上,而不需要关注创建线程、销毁线程等细节问题上。我们抽象类的名称为Thread,其中有一个成员函数run,该函数为的声明形式为:void run() = 0;即将该成员函数声明为纯虚函数,用户继承此类必须要实现此成员函数...
2018-06-27 11:39:15 302
转载 用C++封装线程的互斥操作(linux)
学过操作系统的人,估计都知道互斥量是个何方神圣,我这里也就不再狗尾续貂再做解释了好,先看Linux下关于互斥量的一些API(所谓封装,说白了也就是封装这些API,让这些API更简单好用罢了)一、Linux下互斥量的使用1、定义一个互斥量pthread_mutex_t myMutex;2、初始化互斥量pthread_mutex_init( &myMutex, 0); //第2个参数是设置...
2018-06-11 17:03:13 255
转载 C/C++ 获取文件夹下所有文件名 windows和linux通用
#################################################利用C/C++编写程序以获取文件夹内所有子文件名,以下程序参考网络上诸多博文:头文件如下:[cpp] view plain copy#include <iostream> #include <stdlib.h> #include <stdio.h> #incl...
2018-06-04 09:20:50 1258
转载 C/C++中判断文件或文件夹是否存在
方法1. access函数 适用范围:所有C/C++项目 头文件: #include < io.h> 函数原型: intaccess(const char *filename, int mode); 函数说明:判断是否具有存取文件的权限 函数参数说明: filename:可以填写文件...
2018-05-29 20:17:28 2285
转载 c++箭头运算符重载
箭头操作符(->)的通常用法是,使用一个类对象的指针来调用该指针所指对象的成员。左操作数为对象指针(this),右操作数为该对象的成员名称。定义重载箭头操作符之后看起来就有点特别,可以用类对象的指针来调用,也可以用类对象直接调用。重载箭头操作符必须定义为类成员函数。箭头操作符与众不同。它可能表现得像二元操作符一样:接受一个对象和一个成员名。对对象解引用以获取成员。不管外表如何,箭头操作符不接...
2018-05-21 19:41:04 688
arm板udhcpc获取无线网卡ip一直回复sending discover.
2017-04-15
TA创建的收藏夹 TA关注的收藏夹
TA关注的人