2021-09-08 opengrok比lxr先进

在同样的Ubuntu服务器上,OpenGrok的效率比LXR要高很多。扫描整个Android AOSP代码,LXR需要18个小时以上,而OpenGrok只需要4个小时。

搭建方法:
https://blog.messyidea.com/archives/44/

对比:
https://daimajiaoliu.com/daima/60f312f2e6e6803

tomcat修改:
catalina.sh
300 # add by guolongji
301 JAVA_OPTS="$JAVA_OPTS -Xms2g -Xmx20g"

非常神奇的替换JAVA中文件的方法!!!
unzip source.war WEB-INF/web.xml
edit web.xml and re-package the jar file.
zip -u source.war WEB-INF/web.xml

opengrok-deploy -c /opengrok/etc/configuration.xml
/opengrok/dist/lib/source.war /var/lib/tomcat10/webapps

java
-Djava.util.logging.config.file=/home/fb-3/guolongji/opengrok/etc/logging.properties
-jar /home/fb-3/guolongji/opengrok/dist/lib/opengrok.jar
-c /usr/local/bin/ctags
-s /home/fb-3/guolongji/opengrok/src/ -d /home/fb-3/guolongji/opengrok/data -H -P -S -G
-W /home/fb-3/guolongji/opengrok/etc/configuration.xml -U http://localhost:8080/source

opengrok-deploy -c /home/fb-3/guolongji/opengrok/etc/configuration.xml
/home/fb-3/guolongji/opengrok/dist/lib/source.war /home/fb-3/guolongji/tomcat/apache-tomcat-10.0.10/webapps

解决路径问题十分耗时,也不是很必要,所以:

重来一遍,按照别人网页上面的所有默认的,知道了吗?yes,sir!

opengrok太多的优化项了:
https://blog.csdn.net/wd229047557/article/details/94571186

别人的方法:

java -Xmx8g -jar ~/software/opengrok/opengrok-1.2.23/lib/opengrok.jar
-c /opt/software/universal-ctags/bin/ctags
-s ~/software/src
-d ~/software/opengrok/opengrok-1.2.23/data -H -P -S -G -v
-W ~/software/opengrok/opengrok-1.2.23/etc/configuration.xml
-U http://localhost:8080/source
-m 256

最终的解决方法!!!!!!:
java -Xmx8g
-Djava.util.logging.config.file=/opengrok/etc/logging.properties
-jar /opengrok/dist/lib/opengrok.jar
-c /usr/bin/ctags
-s /opengrok/src/ -d /opengrok/data -H -P -S -G
-W /opengrok/etc/configuration.xml -U http://localhost:8080/source
-m 512

opengrok-deploy -c /opengrok/etc/configuration.xml /opengrok/dist/lib/source.war /var/lib/tomcat10/webapps

极大提高opengrok的索引速度!!!

export JAVA_OPTS="-Xmx8192m -server"
export OPENGROK_FLUSH_RAM_BUFFER_SIZE="-m 256"

下面这两行可以极大加速index的速度

export OPENGROK_SCAN_REPOS=false
export OPENGROK_GENERATE_HISTORY=off

把索引历史去掉了,这个看起来还是很不错滴!

#######################################
(1)
opengrok-deploy -c /opengrok/etc/configuration.xml /opengrok/dist/lib/source.war /tomcat/webapps

java
-Djava.util.logging.config.file=/opengrok/etc/logging.properties
-jar /opengrok/dist/lib/opengrok.jar
-c /usr/bin/ctags
-s /opengrok/src/ -d /opengrok/data -H -P -S -G
-W /opengrok/etc/configuration.xml -U http://localhost:8080/source

不使用localhost的话需要验签!

opengrok-indexer
-J=-Djava.util.logging.config.file=/opengrok/etc/logging.properties
-a /opengrok/dist/lib/opengrok.jar --
-c /usr/bin/ctags
-s /opengrok/src -d /opengrok/data -H -P -S -G
-W /opengrok/etc/configuration.xml -U http://localhost:8080/source
-m 512

opengrok构建索引也太耗时了吧,需要4个小时,虽然说后续改动的话索引会快很多。
opengrok大功告成!

后续?用什么?感觉最简单的还是用vim cscope和grok啊。静态的看一下大项目也可以!

tinyhttp,转发,安装python管理器,之后按照文档一步一步做。其中不少步骤是文档中没有体现出来的!!!

又是dmesg:

70203 66731 65348 18011 60909 80605

vim最大化窗口:
https://lotabout.me/2015/Vim-%E6%9C%80%E5%A4%A7%E5%8C%96%E5%BD%93%E5%89%8D%E7%AA%97%E5%8F%A3/
太厉害了!

vim实用技巧:
https://zhuanlan.zhihu.com/p/128656618

"允许键删除自动缩进产生的空白字符、换行符和非本次输入的字符
set bs=indent,eol,start 

"设置搜索字符串高亮
set hlsearch
"设置增量搜索
set incsearch 

"设置viminfo
set viminfo='100,<50,s10,%

"设置行号
set number
"或者设置相对行号
" set relativenumber

"设置当请行有下划线
set cursorline
au ColorScheme * hi! Cursorline cterm=bold ctermbg=236 guibg=Grey90
au ColorScheme * hi! CursorLineNr cterm=bold ctermfg=159 ctermbg=236 guibg=Grey90
"设置光标列
set cursorcolumn
au ColorScheme * hi! CursorColumn cterm=bold ctermfg=250 ctermbg=232 guibg=Grey90

"设置背景为亮的
set background=light
"设置颜色组合为默认
colorscheme default
"触发ColorScheme事件时设置自定义配色方案,实现了4组

function! Get_Mode()
    let mode_opts =
        \ {
            \ 'n': 'Normal',
            \ 'no': 'Operator-pending',
            \ 'v': 'visual',
            \ 'V': 'VISUAL',
            \ 'CTRL-V': 'VB',
            \ 'i': 'Insert',
            \ 'R': 'Replace',
            \ 's': 'Select',
            \ 'S': 'Select',
            \ 'CTRL-S': 'Select'
        \ }
    let mode = mode()
    if has_key(mode_opts, mode)
        return mode_opts[mode]
    else
        echo "get mode error!!!"
    endif
endfunc

" set status line
" colorscheme will run hi clear, which clear you own color settings so need
" autocmd to keep you color settings
autocmd ColorScheme *
    \ hi User1 ctermbg=DarkBlue ctermfg=Red guibg=DarkBlue guifg=Red |
    \ hi User2 ctermbg=DarkBlue ctermfg=Yellow guibg=DarkBlue guifg=Red |
    \ hi User3 ctermbg=White ctermfg=Green guibg=White guifg=DarkBlue |
    \ hi User4 ctermbg=White ctermfg=Blue guibg=DarkBlue guifg=Red |
    \ hi User5 term=bold cterm=bold ctermfg=17 ctermbg=190 gui=bold guifg=#00005f guibg=#dfff00 |
    \ hi User6 ctermfg=190 ctermbg=238

"hi! StatusLine ctermfg=White ctermbg=DarkGreen
set statusline =\ %5*%{Get_Mode()}%*
set statusline+=\ %6*[%-6.100F]%*
"设置状态栏,%4*表示选择第4组自定义颜色,%-表示文件名在左侧显示(相对于文件名的长度小于最短字符个数的情况),6.100表示文件名最少占6个字符最多占100个字符,F显示文件的绝对路径,%*是选择自定义颜色的结束标志
"%2*选择第2组自定义颜色,%r显示文件的只读属性”[RO]”,%*表示选择用户自定义颜色的结束
set statusline+=\ %2*%r%*
"当打开preview窗口时显示"[Preview]"
set statusline+=%w
"%1*选择第1组自定义颜色,%m显示文件被修改过的标记为”[+]”,%*表示选择用户自定义颜色的结束
set statusline+=\ %1*%m%*
"%=表示状态栏左栏和右栏的分界
set statusline+=%=
"%l显示行号,%c显示列号
set statusline+=%l,%c
"%p显示插入符所在位置在文件中的百分比,%%显示一个百分比字符
set statusline+=\ %p%%
"%3*选择第3组自定义颜色,%{&fileformat}表示读取’fileformat’选项的内容显示到状态栏上,%*表示选择用户自定义颜色的结束
set statusline+=\ [%3*%{&fileformat}%*]
"2表示总是显示状态栏
set laststatus=2

"设置命令行补全行为为列表模式
set wildmode=longest:list

"设置补全菜单的行为,menuone表示只有一条匹配时也显示菜单,noinsert表示弹出菜单时不插入选项
set completeopt=menuone,noinsert

"保存修改历史到文件中
set undofile
"设置修改历史文件的保存路径
set undodir=~/.vim/undodir

"打开文件类型检测功能,并在必要时自动加载用户定义的插件,’runtimepath’选项定义了Vim加载插件的路径
filetype plugin on

"打开语法高亮 
syntax on

"设置每行的文本宽度为80个字符
set textwidth=80
"删除允许超过屏幕长度行的属性
set formatoptions-=l
"当字符数到达textwidth设置的值时,自动换行
set formatoptions+=t

" 使能所有的帮助文档,包括来自第三方的文档
silent! helptags ALL

"TagList插件参数设置
let Tlist_Ctags_Cmd ='/usr/bin/ctags'
let Tlist_Exit_OnlyWindow = 1
let Tlist_File_Fold_Auto_Close= 1
let Tlist_Inc_Winwidth = 0

"WinMananger插件参数设置
let g:winManagerWindowLayout = "FileExplorer,TagList|BufExplorer,Qucikfix"
let g:persistentBehaviour = 0

"配置cscope的输出到quickfix窗口中
set cscopequickfix=s-,c-,d-,i-,t-,e-,a-
"自动加载cscope产生的符号数据库
if has("cscope")
    set csprg=/usr/bin/cscope
    set csto=0
    set cst
    set nocsverb

    " add any database in current directory
    if filereadable("cscope.out")
        cs add cscope.out
    " else add database pointed to by environment
    elseif $CSCOPE_DB != ""
        cs add $CSCOPE_DB
    endif
    set csverb
endif
"映射cscope的快捷键
nmap s :cs find s =expand(""):copen
nmap g :cs find g =expand("")
nmap c :cs find c =expand(""):copen
nmap t :cs find t =expand(""):copen
nmap e :cs find e =expand(""):copen
nmap d :cs find d =expand(""):copen
nmap f :cs find f =expand(""):copen
nmap i :cs find i =expand(""):copen

"F1打开quickfix窗口
nmap  :copen
"F2关闭quickfix窗口
nmap  :ccl
"F3控制TagList窗口
nmap  :Tlist
"设置CTRL-C复制所选的内容到剪切板
nmap  “+y

"关闭当前搜索高亮
nnoremap l :nohls

"选择要跳转的tag
function! GotoJump()
    jumps
    let j = input("Please select your jump: ")
    if j != ''
        let pattern = '\v\c^\+'
        if j =~ pattern
            let j = substitute(j, pattern, '', 'g')
            execute "normal " . j . "\"
        else
            execute "normal " . j . "\"
        endif
    endif
endfunction

nmap jj :call GotoJump()

"自动更新ctags的符号数据库
function! DelTagOfFile(file)
    let fullpath = a:file
    let cwd = getcwd()
    let tagfilename = cwd . "/tags"
    let f = substitute(fullpath, cwd . "/", "", "")
    let f = escape(f, './')
    let cmd = 'sed -i "/' . f . '/d" "' . tagfilename . '"'
    let resp = system(cmd)
endfunction

function! UpdateTags()
    let f = expand("%:p")
    let cwd = getcwd()
    let tagfilename = cwd . "/tags"
    let cmd = 'ctags -a -f ' . tagfilename . ' --c++-kinds=+p --fields=+iaS --extra=+q ' . '"' . f . '"'
    call DelTagOfFile(f)
    let resp = system(cmd)
endfunction
" autocmd BufWritePost *.cpp,*.h,*.c call UpdateTags()

"Vim退出时自动保存指定类型的文件
function! SaveFile()
    if filewritable(bufname("%")) && getbufvar("%","&modified")
       write
    endif
endfunction

"设置默认的智能补全函数
if has("autocmd") && exists("+omnifunc")
    autocmd Filetype *
       \  if &omnifunc == "" |
           \  setlocal omnifunc=syntaxcomplete#Complete | 
       \  endif
endif

你可能感兴趣的:(2021-09-08 opengrok比lxr先进)