进入 elasticsearch 的 bin 目录,尝试使用 ./elasticsearch 命令启动 elasticsearch 提示如下错误信息:

Exception in thread "main" java.lang.RuntimeException: don't run elasticsearch as root.

解决方法:

1、指定允许root启动。如:
./elasticsearch -Des.insecure.allow.root=true

可以启动,但会提示
[WARN ][bootstrap] running as ROOT user. this is a bad idea!

2、创建一个非root elasticsearch相关的账号

  • 创建一个分组,取名为esgroup,然后,往该分组中添加用户es,并设置es账户的密码
  • 修改elasticsearch目录权限
  • 使用新创建的账号es来登录终端启动

使用 curl -X GET http://localhost:9200 查看信息

推荐使用方法二启动,另外如果要在浏览器中查看,需要修改 elasticsearch.yml 中的 network.host: 127.0.0.1network.host: 0.0.0.0

eg1

1
2
3
4
5
6
func f() (result int) {
defer func() {
result++
}()
return 0
}

eg2

1
2
3
4
5
6
7
func f() (r int) {
t := 5
defer func() {
t = t + 5
}()
return t
}

阅读更多

简介

在 Go http包的Server中,每一个请求都有一个对应的 goroutine 去处理。请求处理函数通常会启动额外的 goroutine 用来访问后端服务,比如数据库和RPC服务。用来处理一个请求的 goroutine 通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息、验证相关的token、请求的截止时间。 当一个请求被取消或超时时,所有用来处理该请求的 goroutine 都应该迅速退出,然后系统才能释放这些 goroutine 占用的资源。

在Google 内部,我们开发了 Context 包,专门用来简化对于处理单个请求的多个 goroutine 之间与请求域的数据、取消信号、截止时间等相关操作,这些操作可能涉及多个 API 调用。

阅读更多

Map 根据键名排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import (
"fmt"
"sort"
)

func main() {
// To create a map as input
m := make(map[int]string)
m[1] = "a"
m[2] = "c"
m[0] = "b"

// To store the keys in slice in sorted order
var keys []int
for k := range m {
keys = append(keys, k)
}
sort.Ints(keys)

// To perform the opertion you want
for _, k := range keys {
fmt.Println("Key:", k, "Value:", m[k])
}
}

阅读更多

Go 的排序思路和 C 和 C++ 有些差别。 C 默认是对数组进行排序, C++ 是对一个序列进行排序, Go 则更宽泛一些,待排序的可以是任何对象, 虽然很多情况下是一个 slice (分片, 类似于数组),或是包含 slice 的一个对象。

排序(接口)的三个要素:

  • 待排序元素个数 n
  • 第 i 和第 j 个元素的比较函数 less
  • 第 i 和 第 j 个元素的交换 swap

阅读更多

Golang 因为其语法简单,上手快且方便部署正被越来越多的开发者所青睐,一个 Golang 程序开发好了之后,势必要关心其运行情况,今天在这里就给大家介绍一下如果使用 Elastic Stack 来分析 Golang 程序的内存使用情况,方便对 Golang 程序做长期监控进而调优和诊断,甚至发现一些潜在的内存泄露等问题。

Elastic Stack 其实是一个集合,包含 Elasticsearch、Logstash 和 Beats 这几个开源软件,而 Beats 又包含 Filebeat、Packetbeat、Winlogbeat、Metricbeat 和新出的 Heartbeat,呵呵,有点多吧,恩,每个 beat 做的事情不一样,没关系,今天主要用到 Elasticsearch、Metricbeat 和 Kibana 就行了。

阅读更多

一、使用包管理器进行安装

  • 更新 Homebrew的package数据库(macosx上的软件包管理工具)
1
$ brew update
  • 安装MongoDb
1
$ brew install mongodb
  • 启动MongoDb(安装成功后命令行有提示)
1
$ sudo mongod --config /usr/local/etc/mongod.conf
  • 连接到mongo
1
$ mongo

阅读更多

安装

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

常用命令

1
2
3
4
5
6
7
8
9
10
11
brew search <package_name>      # 搜索
brew install <package_name> # 安装一个软件
brew update # 从服务器上拉取,并更新本地 brew 的包目录
brew upgrade <package_name> # 更新软件
brew outdated # 查看你的软件中哪些有新版本可用
brew cleanup # 清理老版本。使用 `-n` 参数,不会真正执行,只是打印出真正运行时会做什么。
brew list --versions # 查看你安装过的包列表(包括版本号)
brew link <package_name> # 将软件的当前最新版本软链到`/usr/local`目录下
brew unlink <package_name> # 将软件在`/usr/local`目录下的软链接删除。
brew info # 显示软件的信息
brew deps # 显示包依赖

简介

Supervisor 是一个 Python 开发的 client/server 系统,可以管理和监控类 UNIX 操作系统上面的进程。它可以同时启动,关闭多个进程,使用起来特别的方便。

组成部分

supervisor 主要由两部分组成:

  • supervisord(server 部分):主要负责管理子进程,响应客户端命令以及日志的输出等;
  • supervisorctl(client 部分):命令行客户端,用户可以通过它与不同的 supervisord 进程联系,获取子进程的状态等。

阅读更多