运行命令

深度解密Go语言之 pprof

坚强是说给别人听的谎言 提交于 2019-12-04 05:29:28
目录 什么是 pprof pprof 的作用 pprof 如何使用 runtime/pprof net/http/pprof pprof 进阶 Russ Cox 实战 查找内存泄露 总结 参考资料 相信很多人都听过“雷神 3”关于性能优化的故事。在一个 3D 游戏引擎的源码里,John Carmack 将 1/sqrt(x) 这个函数的执行效率优化到了极致。 一般我们使用二分法,或者牛顿迭代法计算一个浮点数的平方根。但在这个函数里,作者使用了一个“魔数”,根本没有迭代,两步就直接算出了平方根。令人叹为观止! 因为它是最底层的函数,而游戏里涉及到大量的这种运算,使得在运算资源极其紧张的 DOS 时代,游戏也可以流畅地运行。这就是性能优化的魅力! 工作中,当业务量比较小的时候,用的机器也少,体会不到性能优化带来的收益。而当一个业务使用了几千台机器的时候,性能优化 20%,那就能省下几百台机器,一年能省几百万。省下来的这些钱,给员工发年终奖,那得多 Happy! 一般而言,性能分析可以从三个层次来考虑:应用层、系统层、代码层。 应用层主要是梳理业务方的使用方式,让他们更合理地使用,在满足使用方需求的前提下,减少无意义的调用;系统层关注服务的架构,例如增加一层缓存;代码层则关心函数的执行效率,例如使用效率更高的开方算法等。 做任何事,都要讲究方法。在很多情况下,迅速把事情最关键的部分完成

深入浅出Node.js

梦想的初衷 提交于 2019-12-04 04:36:24
深入浅出Node.js 一直想致力于写一篇关于广义讲解Node.js系统的文章,苦于时间有限,资源有限。这篇文章是在结合自己的学习心得以及与行业大佬共同探讨下争对于熟练掌握JS语言后的广义Node.js.至于为什么叫作广义在后文会提到。希望看到这篇文章后可以激发大家对Node.js的学习兴趣,这篇文章的初衷就是致力于帮助大家可以走进Node.js世界。 简介: Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非 常好。 底层选择用c++和v8来实现的 注意:广义的Node.js是指不掌握以底层C++技术以及V8知识,利用Node.js运行在服务端的JS特性完成操作,很多小伙伴会产生疑惑Node.js是什么,简单的来说:Node.js是解析器. 优势: RESTful API 这是NodeJS最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。它本质上只是从某个数据库中查找一些值并将它们组成一个响应。由于响应是少量文本,入站请求也是少量的文本,因此流量不高

monkey

时间秒杀一切 提交于 2019-12-04 04:21:43
一、monkey简介 在 Android的官方自动化测试领域有一只非常著名的“猴子”叫Monkey,这只“猴子”一旦启动,就会让被测的Android应用程序像猴子一样活蹦乱跳,到处乱跑。人们常用这只“猴子”来对被测程序进行压力测试,检查和评估被测程序的稳定性。 monkey官方文档: http://www.android-doc.com/tools/help/monkey.html Moneky 路径 Monkey程序是Android系统自带的,其启动脚本是位于Android系统的/system/bin目录的Monkey文件,其jar包是位于Android系统的/system/framework目录的Monkey.jar文件。用户主要是通过adb命令来启动Monkey的,Monkey在运行时,会根据命令行参数的配置,生成伪随机的事件流,并在Android设备上执行对应的测试事件。同时,Monkey还会对测试系统进行监测,当出现以下三种情况时会进行特殊处理: 如限定了 Monkey运行在特定包上,当监测到试图转到其他包的操作,将对其进行阻止。 如应用程序崩溃或接收到任何失控异常, Monkey将记录对应的错误日志,并根据命令行参数判断是停止运行还是继续运行。 如果应用程序发生了程序无响应( application not responding)的错误,Monkey将记录对应的错误日志

docker

佐手、 提交于 2019-12-04 03:17:03
docker构建镜像的方式有两种,一种是通过 docker commit 命令构建,另一种是通过 Dockerfile 构建文件构建。下面分别通过两种方式介绍这两种构建方式。 接下来,我们会分别采用上述的两种方式构建带有vim命令的centos镜像。 1、环境准备 我们先查看下当前的环境。在本地docker仓库中现在有一个centos 7.4.1708 的镜像,如果没有请先拉取。 现在以交互的方式运行该centos7镜像 docker run -it centos:7.4.1708 -it 参数 这个参数是以交互方式运行centos镜像的意思,也就是我们进入到该centos7的容器中(也就是该用户空间中),这里需要注意一点的是,我们的容器是运行在宿主主机上的,也就是说容器的运行内核是宿主主机的内核(bootfs)。这里,如果我们在centos镜像中运行 uname 命令,这里显示的是docker宿主主机的内核版本号。 接下来,我们以交互方式运行下centos容器的vim命令,结果base image是没有预装vim命令的。 我们看到,在命令行的左边,出现了一个 74c83be9fd78 , 这个是在docker engine运行的容器ID,我们在宿主主机上可以通过命令,查看当前在docker引擎中运行的所有容器。 docker ps 下方的就是我们运行中的centos容器了。 2

【转】基于Redis Lua脚本实现的分布式锁(Java实现)

℡╲_俬逩灬. 提交于 2019-12-04 01:24:35
最近项目中需要用到一个分布式的锁,考虑到基于会话节点实现的zookeeper锁性能不够,于是想使用redis来实现一个分布式的锁。看了网上的几个实现方案后,发现都不够严谨。比如这篇: 用Redis实现分布式锁 里面设计的锁有个最大的问题是锁的超时值TTL会一直被改写,“尽管C3没拿到锁,但它改写了C4设置的锁的超时值,不过这一点非常微小的误差带来的影响可以忽略不计”,其实在高并发的时候会导致进程“饿死”(也有文章称为死锁)。还有这篇文章“ 两种分布式锁实现方案2 ”里面的v2=getset(key,时间戮+超时+1),其加1秒操作在大并发下也会触发同样的问题。网上 这篇文章 解决了这个“无休止的TTL”问题,我简单翻译了下。 锁是编程中非常常见的概念。在维基百科上对锁有个相当精确的定义: 在计算机科学中,锁是一种在多线程环境中用于强行限制资源访问的同步机制。锁被设计用于执行一个互斥的并发控制策略。 In computer science, a lock is a synchronization mechanism for enforcing limits on access to a resource in an environment where there are many threads of execution. A lock is designed to enforce

Docker入门

北城余情 提交于 2019-12-04 00:50:25
原文地址:http://dockone.io/article/8350 在计算机技术日新月异的今天, Docker 在国内发展的如火如荼。特别是在一线互联网公司 Docker 的使用是十分普遍的,甚至成为了一些企业面试的加分项,不信的话看看下面这张图。 这是我在某招聘网站上看到的招聘 Java 开发工程师的招聘要求,其中有一条熟悉 Docker 成为了你快速入职的加分项,由此可见熟悉 Docker 在互联网公司的地位之重要。 市面上已经有很多优秀的 Docker 教程,但是很多原理性的东西,笔者认为那些教程对初学者而言还是很难理解,感觉没有说清楚(笔者自己都觉得挺懵逼的)。为了让初学者少走弯路,我将以我的学习经历以及作为一个 CTF 的角度,编写此套教程,来带大家去了解并熟练运用 Docker 。 Docker 是什么? 说了这么多, Docker 到底是个什么东西呢?我们在理解 Docker 之前,首先得先区分清楚两个概念,容器和虚拟机。 可能很多读者朋友都用过虚拟机,而对容器这个概念比较的陌生。我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件。 每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。 每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。

Storm概念讲解和工作原理介绍

China☆狼群 提交于 2019-12-04 00:07:57
Strom的结构 Storm与传统关系型数据库 传统关系型数据库是先存后计算,而storm则是先算后存,甚至不存 传统关系型数据库很难部署实时计算,只能部署定时任务统计分析窗口数据 关系型数据库重视事务,并发控制,相对来说Storm比较简陋 Storm与Hadoop,Spark等是流行的大数据方案 与Storm关系密切的语言:核心代码用clojure书写,实用程序用python开发,使用java开发拓扑 topology Storm集群中有两种节点,一种是控制节点(Nimbus节点),另一种是工作节点(Supervisor节点)。所有Topology任务的 提交必须在Storm客户端节点上进行(需要配置 storm.yaml文件),由Nimbus节点分配给其他Supervisor节点进行处理。 Nimbus节点首先将提交的Topology进行分片,分成一个个的Task,并将Task和Supervisor相关的信息提交到 zookeeper集群上,Supervisor会去zookeeper集群上认领自己的Task,通知自己的Worker进程进行Task的处理。 和同样是计算框架的MapReduce相比,MapReduce集群上运行的是Job,而Storm集群上运行的是Topology。但是Job在运行结束之后会自行结束,Topology却只能被手动的kill掉,否则会一直运行下去

nodejs 基础篇整合

99封情书 提交于 2019-12-03 23:44:18
nodeJs 基础篇整合 最近有朋友也想学习nodeJs相关方面的知识,如果你是后端想接近前端,node作为一门跑在服务端的JS语言从这里入门再好不过了。如果你正好喜欢前端,想走的更高,走的更远。nodeJs同样也是不二之选。node的地位虽然在实战项目中运用的不是很多,但也不能否认它在处理高并发,服务端渲染,前端自动化方面的优势。总而言之。如果你是个自学能力很强的人。请来到这里学习。让我们一起去打开node的世界,游走于前端与服务端之间。你如果能掌握如下知识那么你的node基础功底将会十分强大。 简介: Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好。 底层选择用c++和v8来实现的 优势:1. RESTful API 这是NodeJS最理想的应用场景,可以处理数万条连接,本身没有太多的逻辑,只需要请求API,组织数据进行返回即可。它本质上只是从某个数据库中查找一些值并将它们组成一个响应。由于响应是少量文本,入站请求也是少量的文本,因此流量不高,一台机器甚至也可以处理最繁忙的公司的API需求。 统一Web应用的UI层 目前MVC的架构

Linux命令详解 — nice

不打扰是莪最后的温柔 提交于 2019-12-03 23:03:15
【命令】nice — 调整程序运行的优先级 【格式】nice [OPTION] [command [arguments...]] 【说明】 在当前程序运行优先级基础之上调整指定值得到新的程序运行优先级,用新的程序运行优先级运行命令行"command [arguments...]"。优先级的范围为-20 ~ 19 等40个等级,其中数值越小优先级越高,数值越大优先级越低,既-20的优先级最高, 19的优先级最低。若调整后的程序运行优先级高于-20,则就以优先级-20来运行命令行;若调整后的程序运行优先级低于19,则就以优先级19来运行命令行。若 nice命令未指定优先级的调整值,则以缺省值10来调整程序运行优先级,既在当前程序运行优先级基础之上增加10。 若不带任何参数运行命令nice,则显示出当前的程序运行优先级。 例1: 1. # nice 2. 0 3. # 在例1中,不用任何参数执行命令"nice"(见第1行),所以显示出当前的程序运行优先级为0(见第2行)。由此可知系统缺省的程序运行优先级为0。 例2: 1. # nice nice 2. 10 3. # 在例2中,第1个nice命令以缺省值来调整第2个nice命令运行的优先级,既在系统缺省的程序运行优先级0的基础之上增加10,得到新的程序运行优先级10,然后以优先级10来运行第2个nice命令

gcc详解以及静态,动态库的生成 2

拟墨画扇 提交于 2019-12-03 22:28:40
我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两 种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态 库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运 行时还需要动态库存在。本文主要通过举例来说明在Linux中如何创建静态库和动态库,以 及使用它们。 在创建函数库前,我们先来准备举例用的源程序,并将函数库的源程序编译成.o文件。 第1步 :编辑得到举例的程序--hello.h、hello.c和main.c; hello.c(见程序2)是函数库的源程序,其中包含公用函数hello,该函数将在屏幕上输出" Hello XXX!"。hello.h(见程序1)为该函数库的头文件。main.c(见程序3)为测试库文件的 主程序,在主程序中调用了公用函数hello。 程序1: hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name); #endif //HELLO_H 程序2: hello.c #include <stdio.h> void hello(const char *name) { printf("Hello %s!\n", name); } 程序3: main.c #include "hello.h" int