作者归档:saki

RSS feed of saki

Segmentation fault : __gnu_cxx::__exchange_and_add(int volatile*, int) ()

问题

core文件堆栈:

Core was generated by `/data/app/saki_test//bin//saki_svrd`.
Program terminated with signal 11, Segmentation fault.
#0  0x08268a79 in __gnu_cxx::__exchange_and_add(int volatile*, int) ()
(gdb) bt
#0  0x08268a79 in __gnu_cxx::__exchange_and_add(int volatile*, int) ()
#1  0x0824f730 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string() ()
...

原因

从上面 core 文件可以看出 string 结构被破坏,析构的时候直接挂掉了,被破坏的原因自然是周围(最大可能是之前的位置)数据写超了,写到了自己的一亩三分地来了,这种宕机的特点是比较难定位,宕机的位置一般是STL容器或者是自己定义的类结构析构的时候 出错,排查的一般方法就是找代码的周围行或者是相邻时刻执行的代码行,排查可能超出内存边界的写操作,预防的方法自然是加强临界地址的判定。

解决办法

定位原因是用于存放结果的字符串数组写超了,解决办法是预先估计数据大小,再使用 std::vector 来替换字符串使用。

以上~

继续阅读

金特会

金特会

美国总统特朗普与朝鲜最高领导人金正恩于当地时间6月12日上午9时许(北京时间9时许)在新加坡圣淘沙岛嘉佩乐酒店进行了历史性会晤。

本文链接:/2018/06/12/jinte/
请尊重作者的劳动成果,转载请注明出处!Sakishum 博客保留对文章的所有权利。

[Django]'tuple' object has no attribute 'startswith'

Django 上传图片, 报错 500。

把settings.py 里的 debug 设置成 True 。看一下具体的错误信息。 错误信息打印的是

'tuple' object has no attribute 'startswith'

根据关键字查询,定位是 MEDIA_ROOT 设置的有问题,重新设置一下 Django 的 settings.py

# 媒体文件别名(相对路径) 和 绝对路径
MEDIA_URL = "/media/"   
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/').replace('\\', '/')

重启一下 uwsgi, 上传图片成功。 Oh, Yeah~

以上

继续阅读

[goim]/usr/local/go/pkg/tool/linux_amd64/link: signal: killed

环境:

  • 腾讯云 1核1G
  • Linux VM_0_16_centos 3.10.0-693.11.6.el7.x86_64
  • gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
  • go version go1.9.4 linux/amd64

问题描述

这是什么鬼!?

# go install
go build goim/logic: /usr/local/go/pkg/tool/linux_amd64/link: signal: killed

从来没有见过这样的错误!!!

go build signal: killed #32

Google 之后再 github 找到了类似错误信息的讨论 https://github.com/beego/wetalk/issues/32

Just in case, this happened me few times when memory ran out. Usually when running go build/get in a VM with 512MB or less, or in docker container with limited and low RAM. ——korya commented on 12 Nov 2014

解决办法

原来是服务器上的内存都用快光了

# free -h
              total        used        free      shared  buff/cache   available
Mem:           992M        401M         73M        160M        517M        213M
Swap:            0B          0B          0B

把服务器上吃内存多的服务停掉, 例如 Kafka 。。。

释放内存到 512 M 内存以上了, go install 就成功了

总结

编译比较大型的 go 项目时内存空闲最好保持在 1GB 或更多 !!!! 7 (- 人 -)

Done.

本文链接:/2018/06/11/golangusrlocalgopkgtoollinux_amd64link-signal-killed/
请尊重作者的劳动成果,转载请注明出处!Sakishum 博客保留对文章的所有权利。

Spark 异常 requirement failed: numRecords must not be negative

问题描述

SparkStreaming 报错:

Exception in thread "main" java.lang.IllegalArgumentException: requirement failed: numRecords must not be negative

按字面意思理解,说是传入的偏移量是负数,但经过检查其实并没有赋任何负数给偏移量。昨天还跑的好好的程序今天怎么就不行了呢?然而重启并不能解决这个问题,只能研究一下了。根据提示猜想可能是 kafka topic 的 offset 越界导致的问题, 按照这个思路最后查到了原因:

log.retention.hours=24 (The minimum age of a log file to be eligible for deletion) 因此,应该是 kafka 中未被消费的数据被 broker 清除了,使得 zk 中的 offset 落在仍存在的最老 message offset 的左侧,本来合法的 offset变得不非法了。

在我的配置文件中 kafka/config/server.properties :

log.retention.hours=168

设置的时间是 168 小时( 7 天),项目里的这个 topic 从创建到今天已经超过 7 天,所以踩到了这个坑。

解决办法:

  • 及时消费掉目标 topic 中的数据,并且消费延时不能大于 log.retention.hours 的配置;
  • 为这个异常做容错处理,能让 job 继续执行。

Done.

本文链接:/2018/05/27/result-spark-requirement-failed-numrecords-must-not-be-negative/
请尊重作者的劳动成果,转载请注明出处!Sakishum 博客保留对文章的所有权利。

[Git] 修改 Commit 提交的记录

身为程序员,偶尔会遇上不太顺心的项目,心情不好的时候,在代码注释或 Commit 信息里面“抒发下”一下情绪也是很常见的,只是這要让别人看到就不好解释了。 今天提交代码的时候, 不“小心”在 commit 的时候输入了 WTF。以下是解决的办法。。。

继续阅读