- 博客(28)
- 资源 (7)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 golang中内存泄露的发现与排查
项目场景:golang中内存泄露的发现与排查一直是来是go开发者头疼的一件事,恰巧最近负责的风控项目,内存使用暴涨,发生了内存直接打满而挂掉的情况。刚开始以为是随着业务的增长,数据处理不过来导致的。但是经过业务的分析和对比,发现并不是如此。幸好go语言有性能大杀器可以监控到,最终根据pprof,问题定位到为go协程泄漏问题。解决完问题后进行记录和分享,写的不对之处,请大家多多指出。问题描述:运维同学发出告警提示,服务器的内存即将打满,看看服务是否异常。收到这个消息后,赶紧看服务器的资源使用情况
2021-04-29 14:37:55
17520
6
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Spring boot 集成Axis1.4 ,使用wsdd文件发布webservice
Spring boot 集成Axis1.4 ,使用wsdd文件发布webservice前言说起web service最近几年restful大行其道,大有取代传统soap web service的趋势,但是一些特有或相对老旧的系统依然使用了传统的soap web service,例如在iptv和ott行业中进行系统交互的接口协议。目前就遇到了这种情况,线上环境对接的系统统一使用soap web se
2017-05-08 19:24:32
38550
26
原创 Kafka 生产环境硬件配置选择
服务器台数选择磁盘选择内存选择kafka 堆内存建议每个节点: 10g-15g1.1 查看 Kafka 进程号1.2 根据 Kafka 进程号,查看 Kafka 的 GC 情况参数说明:1.3 根据 Kafka 进程号,查看 Kafka 的堆内存页缓存页缓存是 Linux 系统服务器的内存。 我们只需要保证 1 个 segment(1g)中25%的数据在内存中就好。所以综合建议服务器内存( 堆内存+页缓存 )大于等于 11G。建议 32 个 cpu core......
2022-06-23 12:55:19
665
1
原创 fatal: refusing to merge unrelated histories
本地初始化了git仓库,放了一些文件进去并进行了add操作和commit提交操作 ##设置main 为默认分支, 不是master git config --global init.defaultBranch main git add . git commit -m "init project"gitlab创建了git仓库并建立了README文件,main为主分支本地仓库添加了gitlab上的git仓库作为远程仓库,起名origingit remote add origin .
2022-03-30 20:58:00
422
原创 mysql 根据访问ip数据统计日活/周活/月活
背景:需要统计数据库中的访问日志情况,要根据ip来统计网站的不同维度的活跃情况。按天统计##如果不去重,可以去掉distinctSELECT DATE_FORMAT(start_time,'%Y%m%d') days, COUNT(distinct ip) dcount FROM test GROUP BY days; 按周统计##如果不去重,可以去掉distinct##此处需要注意,结果中的weeks 是按照自然周来计算的,如果需要限制到某个月份,需要添加where条件SELECT .
2022-03-21 16:29:23
668
原创 golang 操作mongo上亿级别数据的插入优化方案
golang 操作mongo上亿级别数据的插入优化方案背景mongo集群中已经存在十五亿数据,需要将一批将近8亿条数据(有重复)继续导入进数据库中。此数据存储在了sqllite 中。要求:1:如果数据已经存在,需要更新操作;如果没有数据,则执行新增操作。可以利用mongodb的 upsert操作来处理。2:时间尽量压缩方案一读取数据,将每条数据进行upsert操作。此方案可以满足要求1,但是不满足要求2。 处理时间预计在30-40天左右方案二批量处理,使用collection.Bul
2022-03-21 12:37:35
2684
原创 golang并发控制之channel
并发控制之channel我们考虑一种场景,协程A在执行过程中需要创建子协程A1、A2、A3…An,协程A创建完子协程后就等待子协程退出。针对这种场景,Go提供了三种解决方案。Channel:使用channel控制子协程WaitGroup:使用信号量机制控制子协程Context:使用上下文控制子协程三种方案各有优劣,比如Channel的优点是实现简单,清晰易懂,WaitGroup的优点是子协程的个数可以动态调整,Context的优点是对子协程派生出来的孙子协程的控制。各种解决方案的缺点是相对而言
2021-09-07 10:17:24
718
1
原创 golang面试题(2):for-range特性
下面这段代码输出的内容package mainfunc main() { slice := []int{0,1,2,3} m := make(map[int]*int) for key,val := range slice { m[key] = &val } for k,v := range m { fmt.Println(k,"->",*v) }}答案: 3 2 1 p
2021-09-07 09:41:08
132
原创 golang面试题(1):defer的执行顺序
下面这段代码输出的内容package mainimport ( "fmt") func defer_function() { defer func() { fmt.Println("1") }() defer func() { fmt.Println("2") }() defer func() { fmt.Println("3") }() panic("exception")}func main() { defer_function()}
2021-09-06 10:54:59
899
原创 golang协程goroutine
协程goroutine概念协程(英语:coroutine)是计算机程序的一类组件,推广了协作式多任务的子例程,允许执行被挂起与被恢复。相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。协程更适合于用来实现彼此熟悉的程序组件,如协作式多任务、异常处理、事件循环、迭代器、无限列表和管道。根据维基百科的记录,协程术语coroutine最早出现在1963年发表的论文中,论文作者是美国计算机科学家马尔文·爱德华·康威。协程并不是Go发明的概念,支持协程的编程语言有很多,比如python、pe
2021-08-30 15:08:33
1626
1
原创 golang控制结构之select
selectselect是Go在语言层面提供的多路I/O复用机制,用于检测多个管道是否就绪( 即可读或可写 ),其特性和管道息息相关。特性速览管道读写select只能作用于管道,包括数据的读取和写入,如下面代码所示:func SelectForChan(c chan string) { var recv string send := "Hello" select { case recv = <-c: fmt.Printf("recvied %s \n", recv) case
2021-08-28 12:48:42
3081
原创 golang数据结构初探之字符串string
字符串stringstring 是Go语言中的基础数据类型。特性速览声明声明string变量非常简单,常见的方式有以下两种:声明一个空字符串后再赋值var s string s = "hello world"需要注意的是空字符只是长度为0,但不是nil。不存在值为nil的string使用简短变量声明:s := "hello world" //直接初始化字符串双引号与单引号字符串不仅可以使用双引号赋值,也可以使用反单引号赋值,它们的区别是在于对特殊字符的处理。假如我们希望stri
2021-08-23 15:40:05
6681
原创 golang数据结构初探之iota
iotaGo语言的iota常用于const表达式中,其值是从0开始的,const声明块中每增加一行,iota值都会自增1。使用iota可以简化常量的定义,但其规则必须牢记,否则在阅读源码时可能会造成误解或者障碍。本章我们尝试从编译器的角度来理解iota,从而加深认识。特性速览在常量声明语句中,iota经常用于声明连续的整型常量。iota的取值与其出现的位置强相关。iota在const关键字出现时被重置为0const声明块中每新增一行,iota的值自增1这种描述本身没有错误,在简单的语句中套
2021-08-20 18:16:33
7422
原创 golang数据结构初探之结构体struct
结构体structGo语言的struct与其他编程语言的class有些类似,可以定义字段和方法,但是不可以继承内嵌字段Go语言的结构体没有继承的概念,当需要"复用"其他结构体时,需要使用组合的方式将其他结构体嵌入进来。如下所示:type Animal struct { Name string}func (a *Animal) SetName(name string) { a.Name = name}type Cat struct { Animal //隐式声明}func m
2021-08-20 15:52:26
6190
原创 golang数据结构初探之字典map
MapGo语言的map底层使用Hash表实现的特性预览操作方式初始化map分别支持字面量初始化和内置函数make()初始化字面量初始化func MapInit() { m := map[string]int{ "apple": 1, "banana": 2, } for k, v := range m { fmt.Printf(" %s : %d \n", k, v) }}内置函数make()func MapInit() { m := make(map[st
2021-08-19 17:14:25
5642
原创 golang数据结构初探之动态数组slice
动态数组sliceslice 又称动态数组,依托于数组实现,可以方便的进行扩容和传递,实际使用时比数组更灵活。但正是因为灵活,实际使用时更容易出错,避免出错的最好方法便是了解其实现原理。特性速览初始化声明和初始化切片的方式主要有以下几种方式:变量声明字面量使用内置函数make()从切片和数组中切取变量声明这种声明方式的切片变量与声明其他类型变量一样,变量值都为零值,对于切片来讲零值为nilvar s []int字面量也可以使用字面量初始化切片,需要了解的是空切片是指长度为空,
2021-08-17 18:31:33
19155
原创 golang数据结构初探之管道chan
golang数据结构初探之管道chan管道是go在语言层面提供的协程之间的通信方式,比unix的管道更易用也更轻便。特效速览初始化声明和初始化管道的方式主要有以下两种:变量声明使用内置函数变量声明这种方式声明的管道,值为nil。每个管道只能存储一种类型的数据var ch chan int //声明管道使用内置函数 make()使用内置函数make() 可以创建无缓冲管道和带缓冲管道ch1:=make(chan string) //无缓冲管道ch2:=make(chan s
2021-08-16 12:45:09
18806
原创 基于gitlab+docker+k8s打造自动化构建部署流程
工程自动化构建部署前言 随着需求越来越多,以及相关代码分支权限的流程规范化,团队内部的项目上线部署复杂度提升,基于现有的环境和市场上主流的软件,打造了一套基于gitlab+docker+harbor+kubernetes的自动化构建部署流程(CI/CD),目前团队内部流程基本走通,整理了一份相关文档分享出来。写的糙的地方,轻喷。概念GitLab CI/CD GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。与之对应的有GitHub和
2021-08-06 18:45:39
35745
8
原创 nfs搭建手册
nfs搭建手册执行命令需要每台服务器上都执行yum install -y nfs-utils rpcbindmkdir -p /data/nfs/chmod 777 /data/nfschown -R nfsnobody:nfsnobody /data/nfs服务端需要添加配置echo "/data/nfs *(rw,no_root_squash,no_all_squash,sync)" > /etc/exportssystemctl start rpcbind syste
2021-08-02 15:50:24
14397
原创 使用sealos快速搭建 k8s集群
k8s 集群搭建环境信息,并且配置服务器互信主机ipmaster1192.168.0.2master2192.168.0.3master3192.168.0.4node0192.168.0.5注意事项服务器之间必须配置互信,或者使用统一密码(建议互信的方式)必须同步所有服务器时间所有服务器主机名不能重复系统支持:centos7.6以上 ubuntu16.04以上内核推荐4.14以上, 系统推荐:centos7.7使用
2021-08-02 14:27:15
15059
原创 golang 数组随机排序
golang 数组随机排序文章目录golang 数组随机排序前言具体实现步骤如下1.引入库2.读入数据总结前言目前接到一个推荐数据的需求,需要将数据库中获取到的数据进行随机排序后返回给用户。考虑了一下,有两种使用方式,一种是通过数据库 order by rand() ,还有一种就是本文需要使用到的代码处理具体实现步骤如下1.引入库代码如下:import ( "fmt" "math/rand" "time")2.读入数据代码如下:type CategoryEntity str
2021-04-23 19:02:15
15969
原创 记一次通过curl命令使用post请求丢失数据的情况和解决方案
记一次通过curl命令使用post请求丢失数据的情况和解决方案执行命令,提交数据curl -X POST "http://localhost:8880/api/risk_rule_base/edit" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"is_enabled\": 0, \"rule_id\": 7, \"rule_json\": \"{\\\"sign\\\":\\\"4\\\",\\\"m
2021-02-03 10:44:00
16456
原创 基于Go语言实现的简易api网关
基于Go语言实现的简易api网关 (新手轻喷)api网关核心功能是实现http转发和重新功能,http代理的结构和思路很简单,通过浏览器发送请求,proxy拿到浏览器的请求去请求目标地址,然后获得结果它再发送给浏览器。对于Go语言来说,实现转发只需要简单的一行代码即可实现,如下所示:httputil.NewSingleHostReverseProxy(address)基于此功能,进行简单包装,实现从远端admin管理中心获取需要转发的路由信息或者可以从本地配置文件中获取,实现动态转发。后续可以根据业
2020-12-05 12:55:41
19684
2
原创 linux下如何使用nohup启动后台进程
linux下如何使用nohup启动后台进程方案一:新建一个start.sh ,然后执行 sh start.sh ,关闭窗口,进程可以正常后台运行。内容如下示例:#!/bin/shnohup ./domain_agent -domain_file ./domain_file.txt 2>&1 &方案二:直接运行命令:nohup ./domain_agent -domain_file ./domain_file.txt 2>&1 &使用
2020-12-02 09:06:44
15584
原创 如何隐藏启动Tomcat的window的cmd窗口
如何隐藏启动Tomcat的window的cmd窗口,同样适合java -jar 启动服务的方式方案一:使用vbs嵌套打开1:新建startup.vbs CreateObject("WScript.Shell").Run "cmd /c run.bat",02:新建run.bat catalina.bat run3:双击startup.vbs,此时tomcat启动,但是不会弹
2017-09-29 15:58:05
25339
原创 JSON使用案例--一次性解析比较大的json文件
目前在做数据交互的功能时,由于双方交互的格式为Json格式,生成的数据都存储在文本文件中,当数据量少的时候,对应的网上的教程很多。目前针对于数据量较大时,写的一个方法。 代码中使用到的jar包为gson-2.1.jar:http://download.csdn.net/detail/dong945221578/8621163 代码中使用到的json样例: * 解析Json使用到的
2015-04-22 18:14:35
28720
4
原创 java上传文件到FTP文件出现数据丢失
今日在写一个上传文件到FTP功能时,出现文件上传上去后,数据尾部一直丢失一部分。经过各种验证后,发现了造成问题的原因。功能描述:读取数据写入文本,文本写入完毕后将文件上传到指定的FTP地址上。问题描述:数据写入文本成功,本地文件上传到FTP后发现文件尾部会丢失一部分数据。问题原因:原来在数据写入本地上传文件之前没有及时将文本的写入流关闭,导致数据造成丢失了一部分。总结:IO流的关闭不一定是要在fin
2015-04-15 15:28:46
26101
Git-1.9.4-preview20140611
2015-03-19
TortoiseGit_1.8.9.0_x64
2015-03-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人