More than code

More Than Code
The efficiency of your iteration of reading, practicing and thinking decides your understanding of the world.
  1. 首页
  2. 未分类
  3. 正文

opengrok

2024年5月20日 681点热度 2人点赞 0条评论

日常读一些C++代码的时候,个人习惯使用clangd来辅助阅读代码(比如find all reference,转到定义等),但是因为clangd依赖项目支持生成compile_commands.json,所以不是所有的项目都能用clangd来辅助阅读代码的。比如MongoDB,OceanBase个人尝试过都没啥很好的办法来用clangd

组里的大佬给推荐了一个源码阅读的工具叫opengrok,知乎里也有介绍:https://www.zhihu.com/question/33505693/answer/132224974

这里就给一下配置opengrok的教程

配置opengrok

这里其实跟着github里的README来就可以了,opengrok还给提供了docker,配置起来更加方便

详细的在这里:https://github.com/oracle/opengrok/blob/master/docker/README.md

  1. 在github上的release中把opengrok下载下来,解压,会得到一个opengrok的目录
  2. 找个地方创建一个docker-compose.yml。注意这里默认是用的home下的opengrok,可以根据自己的目录调整一下
version: "3"
services:
  opengrok:
    container_name: opengrok
    image: opengrok/docker:latest
    ports:
      - "8080:8080/tcp"
    environment:
      SYNC_PERIOD_MINUTES: '60'
    # Volumes store your data between container upgrades
    volumes:
       - '~/opengrok/src/:/opengrok/src/'  # source code
       - '~/opengrok/etc/:/opengrok/etc/'  # folder contains configuration.xml
       - '~/opengrok/data/:/opengrok/data/'  # index and other things for source code
  1. 执行docker-compose up,官方这里推荐是用docker-compose up -d来后台执行,我推荐第一次先前台执行看看有没有错误日志什么的

一般来说到这里就完事了,这时可以访问下localhost:8080,看看是不是有opengrok的界面了

配置代码仓库

这里就是把需要读的代码仓库下载到opengrok/src下就行,opengrok会自动帮忙pull一下最新的分支

建议一开始先用一个小项目试一下opengrok,看看是否可以正常work,我这里用的是leveldb,git clone后,可以重启一下docker来主动触发index。一般比较小的项目速度会比较快,所以稍等一会后再去访问localhost:8080,应该可以在project中看到你的项目。选择项目后就可以做一些搜索了

然后可以试一下大型项目,我这里用的是mongodb。需要注意的是,大型项目在默认的opengrok的配置下运行会非常的慢,导致你可能认为是opengrok的问题,实际上是他还在执行index,因为index的时间通常比较久

有关细节的调优可以看这里:
* https://github.com/oracle/opengrok/wiki/Tuning-for-large-code-bases
* https://github.com/oracle/opengrok/wiki/Python-scripts-transition-guide

优化点主要有3个:
* opengrok docker下默认会启动history的index,应该是对历史的commit也做index,这对一个大型项目来说开销就更大了,因为大型项目的history通常比较长。
* index的默认并发度比较低,可以调高点。注意同时观察下docker占用的资源,可以在资源空闲的时候多分配一些。
* opengrok有周期性的reindex,可以关掉来节省资源。比如默认10分钟的reindex,可能上一轮的index还未结束

在docker-compose.yaml的environment中加上这几行:

environment:
  SYNC_PERIOD_MINUTES: '0'
  INDEXER_OPT: '--progress --threads 8'

表示不进行reindex,以及index的选项中打开进度,以及设置并发度。

此时再重启docker,就可以正常用了

标签: 暂无
最后更新:2024年5月20日

sheep

think again

点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2021 heavensheep.xyz. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS